我找不到每个 Autowiring 的 bean 没有被代理 Autowiring 的任何原因。我知道因为 @Transactional
注释不起作用,我在 eclipse 调试期间检查了 Autowiring 的组件。当然,每个组件都实现了一些接口(interface),我使用与接口(interface)相关的 @Autowired
注释。 我只有一个aop配置:
<tx:annotation-driven transaction-manager="transactionManager" />
我将 JPA 与 hibernate、spring-mvc、spring-webflow、spring-security 和 spring-data 一起使用。扩展 org.springframework.data.repository.CrudRepository
的接口(interface)由代理 Autowiring 。但我的组件不是。例如,我有类 MyClass
实现了 MyInterface
:
@Service
public class MyClass implements MyInterface {
@Autowired
MyCrudReposiotry reposiotry;
....
}
如果我在某处 Autowiring MyInterface:
@Autowired
MyInterface mi;
然后 mi
只是对 MyClass
对象的引用,存储库是对代理 org.springframework.aop.framework.JdkDynamicAopProxy
的引用。非常有趣的是,在测试中 mi
是对代理的引用。我的测试上下文不包含 web-flow 和 mvc 配置。
也许有一些我应该检查的间接 aop 配置。什么可以关闭代理 Autowiring ?
请您参考如下方法:
我的猜测是您正在扫描相同的组件两次。您可能在根上下文中有一个(用于 ContextLoaderListener),一个用于 DispatcherServlet。否,如果两者都扫描相同的类,您最终会重复(一个代理实例和一个非代理实例)。