我找不到每个 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。否,如果两者都扫描相同的类,您最终会重复(一个代理实例和一个非代理实例)。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!