记录spring使用JDK动态代理,发生的2次代理问题
来源:互联网 发布:matlab编程入门教程 编辑:程序博客网 时间:2024/06/06 20:11
【spring】IllegalArgumentException Can not set field to $Proxy 在spring中使用事物或AOP
- springIllegalArgumentException Can not set field to Proxy 在spring中使用事物或AOP
- spring默认使用的是JDK动态代理
- springIllegalArgumentException Can not set field to Proxy 在spring中使用事物或AOP
spring默认使用的是JDK动态代理
当使用spring 的时候spring默认启动的jdk动态代理.当使用spring 的aop切面编程的时候,在去代理一个jdk动态代理以后的类就会发生2次代理的问题:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'diseasesQueryControl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.ccnt.med.abservice.QueryService org.ccnt.med.control.DiseasesQueryControl.queryService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'queryServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.ccnt.med.dao.TbDiseaseDao org.ccnt.med.servimpl.QueryServiceImpl.tbDiseaseDao; nested exception is java.lang.IllegalArgumentException: Can not set org.ccnt.med.dao.TbDiseaseDao field org.ccnt.med.servimpl.QueryServiceImpl.tbDiseaseDao to $Proxy9 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
使用如下配置可以在spring中使用cgli代理: proxy-target-class=”true”
在spring的配置文件中 配置事务的时候使用<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>如果使用基于Schema的aop则可以如下配置<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" > <property name="sessionFactory" > <ref local="sessionFactory" /> </property> </bean> <!-- 配置哪些方法需要哪些事务 --> <tx:advice id="txadvice" transaction-manager="transactionManager" > <tx:attributes> <tx:method name="create*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="read*" read-only="true" propagation="NOT_SUPPORTED"/> <tx:method name="*" read-only="true" /> </tx:attributes> </tx:advice> <!-- pointcut切入点;advice,通知,即被织入的方法 。这儿是AOP--> <aop:config proxy-target-class="true"> <aop:pointcut id="managerMethods" expression="execution (* org.ccnt.med.dao.TbTopicDao.*(..))" /> <aop:pointcut id="managerMethods" expression="execution (* org.ccnt.med.dao.TbDisTopicDao.*(..))" /> <aop:advisor advice-ref="txadvice" pointcut-ref="managerMethods" /> </aop:config>
0 0
- 记录spring使用JDK动态代理,发生的2次代理问题
- jdk动态代理,spring核心动态代理
- 使用 JDK 动态代理
- 基于Spring AOP的JDK动态代理和CGLIB代理
- 简单模拟Spring AOP功能 (2) JDK动态代理技术和CGLib的动态代理
- JDK的动态代理
- JDK的动态代理
- JDK的动态代理
- JDK的动态代理
- JDK的动态代理
- Jdk的动态代理
- Spring AOP JDK动态代理
- spring中JDK动态代理
- 【Spring】jdk动态代理例子
- jdk动态代理&spring aop
- spring中的jdk动态代理
- Spring的两种代理方式:JDK动态代理和CGLIB动态代理
- Spring的两种代理方式:JDK动态代理和CGLIB动态代理
- Java内功提升之标识符
- UnityEngine.UI.dll is in timestamps but is not known in assetdatabase
- 小组项目总结
- jp2图片处理的开源代码的网址,亲试可用,已用于公司项目的开发
- 《启示录》阅读笔记(二)——产品管理与营销+产品与项目管理
- 记录spring使用JDK动态代理,发生的2次代理问题
- windbg检测句柄泄露(定位到具体代码)
- 用SpriteBuilder简化"耕牛遍地走"的动画效果(一)
- 项目总结
- SpannableStringBuilder.setSpan()的细节
- hadoop 1.2.1 mapreduce
- 爬链家数据(武汉光谷房价)
- spring MVC jpa jpaRepository 数据层访问 方式汇总
- 最新的Hibernate(5.0.2.Final)里配置proxool连接池详细步骤