Java Spring:使用@Resource注入具体类是否需要CGLIB
我已经使用Spring-instrument.jar和以下工具配置了Spring 3.0.6和AspectJ LTW:Java Spring:使用@Resource注入具体类是否需要CGLIB,java,spring,aspectj,cglib,load-time-weaving,Java,Spring,Aspectj,Cglib,Load Time Weaving,我已经使用Spring-instrument.jar和以下工具配置了Spring 3.0.6和AspectJ LTW: <context:load-time-weaver aspectj-weaving="on" weaver-class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> 这是否意味着即使存在加载时weaver,我也应该拥有CGLIB?否,但创建AOP代理(不
<context:load-time-weaver aspectj-weaving="on" weaver-class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
这是否意味着即使存在加载时weaver,我也应该拥有CGLIB?否,但创建AOP代理(不能代理目标类)是必需的。您的班级是否有:
@Transactional
@Cacheable
@Async
<context:load-time-weaver/>
<tx:annotation-driven mode="aspectj"/>
<aop:config proxy-target-class="true"/>
.在对代码进行了3个多小时的研究并更改了Springbean定义XMLs之后,我终于找到了问题所在。这可以从stacktrace的这一部分找到,我在找到解决方案后注意到:
at org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor.postProcessAfterInitialization(AsyncAnnotationBeanPostProcessor.java:126)
根据注释,我将
、
和
中的所有代理目标类属性更改为false,但没有成功
然后,我开始删除XML定义的一部分,以找出哪一部分可以解决这个问题。注释
帮助解决了问题。然后我看到这个元素有一个我没有指定的mode
属性,所以使用了它的默认值proxy
,所以需要CGLIB。当我更改mode=“aspectj”
时,问题解决了:
<task:annotation-driven scheduler="dataProviderScheduler" executor="dataProviderExecutor" mode="aspectj" />
如果您使用的是Spring APO,则需要包含CGLIB。
有两种方法可以将其添加到项目中
下载CGLIB库文件并将其添加到库文件中。
在pom.xml文件中添加Maven依赖项
cglib
cglib
2.2
您是代理一个接口还是一个类?正如前面提到的,它是一个具体的类。Spring将CGLIB用于其所有更现代的功能。没有它你走不了多远。哪些功能?我在LTW中使用了所有的JMX、调度、AOP、TX和IoC。而且:。是否仍需要有CGLIB?请参阅我的编辑。还可以快速阅读我的有关代理和事务的信息。您确定:。文档说明:属性:代理目标类是否要创建基于类的(CGLIB)代理?默认情况下,会创建基于Java接口的标准代理。不,我不确定,我只是从工作代码中复制了它。请尝试使用调试器。这肯定是错误的。参见“注释”伟大发现+1!那么您是否在某处使用了@Async
注释?不应为没有此类方法的类生成CGLIB代理。谢谢,是的,我有@Async
。如果您的异步方法不是从同一bean中的另一个方法调用的,那么CGLIB可以与@Async
一起使用。(这是CGLIB的一个已知问题),但当您从另一个注入源bean的bean调用异步方法时,它会起作用。谢谢
<task:annotation-driven scheduler="dataProviderScheduler" executor="dataProviderExecutor" mode="aspectj" />
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency>