我正在使用泽西休息,并希望泽西过滤器可以访问一些春豆。
然而,正如我从其他线程中发现的那样,如果它们是Java代理而不是生成的Java代理,则Jersey不会获得Spring bean。我想添加proxy-target-class =“true”这样做有什么影响,这只能在一个bean上设置,还是需要在所有引用的bean上设置?
答案 0 :(得分:28)
通过设置proxy-target-class="true"
,您将使用CGLIB2
作为代理,而不是使用jdk代理。
如de documentation:
所述,其含义如下
无法建议最终方法,因为它们无法覆盖。
您需要在类路径上使用CGLIB 2二进制文件,而JDK可以使用动态代理。春天会自动的 当需要CGLIB并且CGLIB库类不需要时警告你 在类路径上找到。
代理对象的构造函数将被调用两次。这是CGLIB代理模型的一个自然结果,即子类 为每个代理对象生成。对于每个代理实例,两个 创建对象:实际代理对象和实例 实现建议的子类。没有表现出这种行为 使用JDK代理时。通常,调用构造函数 代理类型两次,不是问题,因为通常只有 任务发生,并没有实现真正的逻辑 构造
此外,您应该能够使用
为特定组件制作“目标代理”proxyMode=ScopedProxyMode.TARGET_CLASS
答案 1 :(得分:18)
强制CGLib-Proxy虽然控制器正式实现了一个接口(SpringBoot 1.2.3.RELEASE with Spring 4.1.6.RELEASE):
@Controller
@Scope( proxyMode = ScopedProxyMode.TARGET_CLASS )
public class ServiceImpl implements ServiceIntf
{ .... }
这样可以启用有效且有效的@RequestMapping和@Transactional注释
答案 2 :(得分:6)
在Java Spring Config类中使用以下注释:
@EnableAspectJAutoProxy(proxyTargetClass = true)