spring – 为什么不使用代理自动装配
作者:互联网
我找不到为什么每个自动装配的bean都没有被代理自动装配的原因.我知道因为@Transactional注释不起作用,我在eclipse调试期间检查了自动装配的组件.当然,每个组件都实现了一些接口,我使用与接口相关的@Autowired注释.
我只有一个aop配置:
<tx:annotation-driven transaction-manager="transactionManager" />
我使用JPA与hibernate,spring-mvc,spring-webflow,spring-security和spring-data.扩展org.springframework.data.repository.CrudRepository的接口由代理自动装配.但我的组件不是.例如,我有MyClass类实现MyInterface:
@Service
public class MyClass implements MyInterface {
@Autowired
MyCrudReposiotry reposiotry;
....
}
如果我在某处自动装配MyInterface:
@Autowired
MyInterface mi;
那么mi只是对MyClass对象的引用,存储库是对代理org.springframework.aop.framework.JdkDynamicAopProxy的引用.非常有趣的是,在测试中mi是对代理的引用.我的测试上下文不包含web-flow和mvc配置.
也许有一些间接的aop配置我应该检查.什么可以通过代理关闭自动装配?
解决方法:
我的猜测是你要扫描两次相同的组件.您可能在根上下文中(对于ContextLoaderListener)和一个用于DispatcherServlet.如果两者扫描相同的类,则最后是重复的(以及一个代理和一个非代理实例).
标签:proxy-classes,spring 来源: https://codeday.me/bug/20191009/1876123.html