Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 使用代理目标类=";“真的”;春豆_Spring_Jersey - Fatal编程技术网

Spring 使用代理目标类=";“真的”;春豆

Spring 使用代理目标类=";“真的”;春豆,spring,jersey,Spring,Jersey,我正在使用Jersey Rest,希望Jersey过滤器能够访问一些spring Bean 然而,正如我从其他线程中发现的那样,如果Springbean是Java代理而不是生成的Java代理,那么Jersey不会获得Springbean。我想添加代理目标class=“true” 这样做的影响是什么?这可以只在单个bean上设置,还是需要在所有引用的bean上设置?通过设置proxy target class=“true”您将为代理使用CGLIB2,而不是jdk proxy 其含义如下所述: 不

我正在使用Jersey Rest,希望Jersey过滤器能够访问一些spring Bean

然而,正如我从其他线程中发现的那样,如果Springbean是Java代理而不是生成的Java代理,那么Jersey不会获得Springbean。我想添加代理目标class=“true”


这样做的影响是什么?这可以只在单个bean上设置,还是需要在所有引用的bean上设置?

通过设置
proxy target class=“true”
您将为代理使用
CGLIB2
,而不是jdk proxy

其含义如下所述:

  • 不能建议最终方法,因为它们不能被重写

  • 您需要在类路径上使用CGLIB2二进制文件,而JDK可以使用动态代理。春天会自动到来 当需要CGLIB且CGLIB库类不可用时警告您 在类路径上找到

  • 代理对象的构造函数将被调用两次。这是CGLIB代理模型的自然结果,其中 为每个代理对象生成。对于每个代理实例,两个 对象被创建:实际的代理对象和 实现通知的子类。这种行为没有表现出来 当使用JDK代理时。通常,调用 代理类型两次,并不是问题,因为通常只有 任务正在发生,并且没有在系统中实现真正的逻辑 构造器

此外,您应该能够通过使用为特定组件创建“目标代理”

proxyMode=ScopedProxyMode.TARGET_CLASS

尽管控制器正式实现了接口(SpringBoot 1.2.3.RELEASE和Spring 4.1.6.RELEASE),但强制使用CGLib代理:


这将启用有效且有效的@RequestMapping和@Transactional注释在Java Spring配置类中使用以下注释:

@EnableSpectProxy(proxyTargetClass=true)


请注意,为单例bean创建aop范围的代理是一个错误。编辑以避免混淆。但是如何在bean上设置它呢?例如,这将无法抱怨代理目标引用的发生,并且我是否需要在所有引用的bean上设置它?@NavdeepSingh错误消息很清楚:无法对最终类com.mchange.v2.c3p0.ComboPooledDataSource进行子类化。该类是最终类,最终类不能子类化。不工作:通过调试,我可以看到它始终是jdkProxy
@Controller
@Scope( proxyMode = ScopedProxyMode.TARGET_CLASS )
public class ServiceImpl implements ServiceIntf
{ .... }