- android - AmazonSNS - AwsCredentials.properties - NullPointerException
- android - ListView invalidate() 与 invalidateViews() 之间的区别?
- android - 获取上下文的问题
- Android M 权限模型
在使用ProxyFactoryBean和MethodInterceptor拦截多个服务接口(interface)时,当服务接口(interface)方法名相同时,拦截器由于某种原因将服务接口(interface)混淆了。我的问题是:
1.)使用单个ProxyFactoryBean拦截多个接口(interface)时是否需要遵守规则?
2.)代码哪里出了问题?我尝试在“proxyInterfaces”列表中切换 AnotherService 和 AService 的顺序,但这也不起作用。
3.) 我通过将 ProxyFactoryBean 一分为二解决了这个问题(请参阅底部的“解决方法”)。这是唯一的解决方案,还是有办法让我按照“代码”部分中的描述保留 ProxyFactoryBean?
代码:
我有几个使用 ProxyFactoryBean 拦截的服务:
<bean name="MyInterceptor" class="com.test.MyInterceptor">
<bean class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="interceptorNames">
<list>
<value>MyInterceptor</value>
</list>
</property>
<property name="proxyInterfaces">
<list>
<value>com.test.AService</value>
<value>com.test.AnotherService</value>
</list>
</property>
</bean>
拦截器类 MyInterceptor 实现“调用”,如下所示:
public Object invoke(MethodInvocation invocation) throws Throwable {
Method method = invocation.getMethod();
String interfaceName = method.getDeclaringClass().getName();
System.out.println(interfaceName + ": " + method.getName());
}
Service接口(interface)声明如下:
public interface AService{
public void delete();
public void test();
}
public interface AnotherService{
public void delete();
}
现在,当我将 AService Autowiring 到一个类中时,我希望可以使用 AService 的删除和测试功能:
public class Test{
@Autowired
private AService aService;
public void testAservice(){
aService.test();
aService.delete();
}
}
在我的拦截器中,“aService.test()”调用毫无问题地到达。然而,“aService.delete()”调用以某种方式触发了 AnotherService 接口(interface)。拦截器的控制台输出如下:
com.test.AService: test
com.test.AnotherService: delete
解决方法:我将 ProxyFactoryBean 一分为二,使用两个单独的拦截器 bean(两者都引用与之前相同的类):
<bean name="MyInterceptor1" class="com.test.MyInterceptor"/>
<bean class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="interceptorNames">
<list>
<value>MyInterceptor1</value>
</list>
</property>
<property name="proxyInterfaces">
<list>
<value>com.test.AService</value>
</list>
</property>
</bean>
<bean name="MyInterceptor2" class="com.test.MyInterceptor"/>
<bean class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="interceptorNames">
<list>
<value>MyInterceptor2</value>
</list>
</property>
<property name="proxyInterfaces">
<list>
<value>com.test.AnotherService</value>
</list>
</property>
</bean>
现在,此配置会产生预期的输出:
com.test.AService: test
com.test.AService: delete
最佳答案
代理只是列出的接口(interface)的实现,但在 Java 中,不可能从多个接口(interface)实现相同的方法而不发生冲突。
请参阅this例如线程。
因此,只需保留您的解决方法或将删除方法名称更改为不同的(恕我直言,这是更好的选择)。
关于java - Spring ProxyFactoryBean服务拦截不独特,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20908919/
我正在尝试使用 MethodInterceptor 和 ProxyFactorBean 来生成特定方法的审核信息。 我可以看到bean拦截OpMethod已初始化,但当调用originalOp时它永远
我正在尝试实现 ProxyFactoryBean 以创建 AOP 代理,但遇到了一些错误。谁能告诉我哪里出错了。 代码和异常轨迹trace如下: 表演者.java public interfa
我在 ProxyFactoryBean 中遇到问题类, 我们想要获取 targetBean 的类名的 ProxyFactoryBean . 当我们调用 getType 时在 BeanFactory给
我有以下定义: myInterceptor 我定义了 2 个类:MyInterceptor 和 MyCl
在我的应用程序中,我最初使用 ProxyFactoryBean 将事务应用到我的 DAO Bean,如下所示; com.tradi
我一直被这个问题困扰。 使用的组件:Spring 1.2.8、Hibernate 3.2.0 cr1、tomcat、struts、java 6 我正在尝试从 ProxyFactoryBean 获取 b
这是来自 Spring documentation ,第 9.5.4 节 myAdvisor
我是一名优秀的程序员,十分优秀!