色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

解決Spring JPA 使用@transaction注解時(shí)產(chǎn)生CGLIB代理沖突問題

瀏覽:22日期:2023-06-27 11:49:58
Spring JPA 使用@transaction注解時(shí)產(chǎn)生CGLIB代理沖突

在使用JPA進(jìn)行數(shù)據(jù)庫的刪除操作時(shí)需要使用@Transactional注解來支持事物:

@Modifying @Transactional @Query(' delete from FollowerInfo ' + ' where crmAuth = :crmAuth and investUserId = :invUserId') void deleteByCrmAuthAndInvUserId(@Param('crmAuth') String crmAuth, @Param('invUserId') Long invUserId);

但是,在添加了如上方法后,測試服務(wù)啟動(dòng)失敗。

查看日志報(bào)錯(cuò)如下:

Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:446)at org.springframework.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33)at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:317)at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:57)at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:202)... 38 more[2017-02-09 10:56:33 ERROR] [localhost-startStop-1] (org.springframework.web.context.ContextLoader:331) - Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name ’adviserCommFollowerServiceImpl’: Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ounersc.ic.adviser.repository.community.AdviserCommFollowerRepository com.ounersc.ic.adviser.service.impl.AdviserCommFollowerServiceImpl.adviserCommFollowerRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’adviserCommFollowerRepository’: Post-processing of FactoryBean’s singleton object failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1204)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:725)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4738)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5181)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)at java.util.concurrent.FutureTask.run(FutureTask.java:262)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:745)Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ounersc.ic.adviser.repository.community.AdviserCommFollowerRepository com.ounersc.ic.adviser.service.impl.AdviserCommFollowerServiceImpl.adviserCommFollowerRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’adviserCommFollowerRepository’: Post-processing of FactoryBean’s singleton object failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:555)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)... 22 moreCaused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’adviserCommFollowerRepository’: Post-processing of FactoryBean’s singleton object failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:116)at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1512)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1081)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1006)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:904)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:527)... 24 moreCaused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:212)at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:109)at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:445)at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:331)at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:291)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:422)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.postProcessObjectFromFactoryBean(AbstractAutowireCapableBeanFactory.java:1713)at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:113)... 31 moreCaused by: java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy52at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:446)at org.springframework.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33)at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:317)at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:57)at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:202)... 38 more09-Feb-2017 10:56:33.145 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file09-Feb-2017 10:56:33.145 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors

org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy52]: Common causes of this problem include using a final class or a non-visible class

對(duì)于此異常,這篇帖子中講到了產(chǎn)生該異常的原因,但是未給出解決辦法。

http://stackoverflow.com/questions/20063320/springmvc-proxy-issue

簡單來說,原因主要是代理沖突:Spring 早期的版本,要用com.sun.proxy的代理 ,而 jpa如果加了@transaction 注解后 需要用CGLIB的代理

因此產(chǎn)生了沖突

解決辦法:

Spring 已經(jīng)在高版本中修復(fù)了該問題,把Spring從4.0升級(jí)到4.2.5后,問題解決:

在pom.xml加入:

<properties><spring.framework.version>4.2.5.RELEASE</spring.framework.version> </properties>Spring 啟用CGLIB解決事物代理失敗問題描述:

接口A提供公用的CRUD 操作,抽象類B實(shí)現(xiàn)接口A,接口C提供各模型特有的相關(guān)數(shù)據(jù)庫操作。

類D繼承抽象類B實(shí)現(xiàn)接口C如果使用JDK動(dòng)態(tài)代理,Spring會(huì)將類D向上轉(zhuǎn)型為接口C,那么在使用中必須注入接口A。

如果注入類D的類型。會(huì)報(bào)錯(cuò)說代理類型XX無法轉(zhuǎn)換為類D的類型。

解決辦法如下:

<bean class='org.springframework.orm.hibernate4.HibernateTransactionManager'> <property name='sessionFactory' ref='mySessionFactory' /> <property name='dataSource' ref='dataSourceCMS' /> </bean> <!-- the transactional advice (what ’happens’; see the <aop:advisor/> bean below) --> <tx:advice transaction-manager='transactionManagerCMS'> <!-- the transactional semantics... --> <tx:attributes> <tx:method name='*' /> </tx:attributes> </tx:advice> <!-- ensure that the above transactional advice runs for any execution of an operation defined by the FooService interface --> <aop:config proxy-target-class='true'> <aop:pointcut expression='execution(* com.harvest.smartHotels.info.dao.serviceContent.interfaces.*.*(..))' /> <aop:advisor advice-ref='txAdvice' pointcut-ref='fooServiceOperation' /> </aop:config>

動(dòng)態(tài)代理使用CGLIB,這樣注入類型就可以使類D。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 美女黄色片免费 | 亚洲高清免费在线观看 | 欧美成人午夜做爰视频在线观看 | 正在播放国产精品 | 国内精品久久久久影院免费 | 日韩精品视频一区二区三区 | 日韩美女一级片 | 99久热在线精品视频播 | 国产成人cao在线 | 黄色一级网址 | 99精品福利| 免费特黄一级欧美大片 | 日韩免费专区 | 欧美高清在线精品一区 | 午夜美女久久久久爽久久 | 天堂影院jav成人天堂免费观看 | 国产日韩线路一线路二 | 欧美在线一区二区三区不卡 | 在线视频 一区二区 | 又黄又湿又爽吸乳视频 | 九九视频在线观看 | 一本色道久久综合亚洲精品高清 | 亚洲精品国产高清不卡在线 | 加勒比一区在线 | 日本三级欧美三级 | 中日韩精品视频在线观看 | 足恋玩丝袜脚视频免费网站 | 欧美一级片观看 | 福利片成人午夜在线 | 国产精品99久久久久久人 | 亚洲性视频在线 | 日本亚洲欧美国产日韩ay高清 | 亚洲美女在线观看亚洲美女 | 91人成亚洲高清在线观看 | 免费观看欧美性一级 | 日本亚洲免费 | 国产在线小视频 | 久久精品国产在爱久久 | 自拍第1页 | 美日韩一区二区三区 | 日韩欧美在线视频观看 |