当前位置: 首页 > news >正文

【spring】IllegalArgumentException Can not set field to $Proxy 在spring中使用事物或AOP遇到的错误...

今天在spring中使用事务时,遇到了这个问题,已启动tomcat就出错:

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)

解决方法:

http://forum.springsource.org/showthread.php?85016-IllegalArgumentException-with-ApplicationContextAware-Proxy

在配置文件中加入proxy-target-class="true"

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

或者:

<aop:config proxy-target-class="true">

现在我的配置文件如下:

<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>

解释:

AOP使用的动态代理可以针对接口,也可以针对类。java的动态代理只能针对接口。

在用Spring的AOP时,默认动态代理是针对接口的,而我用的是针对类的,所以要加上proxy-target-class="true"

转载于:https://www.cnblogs.com/549294286/archive/2013/04/13/3019074.html

相关文章:

  • 约瑟夫问题
  • C#实现UDP分包组包
  • tomcat 集群搭建
  • 善变的同伴
  • IDC:PC 今年第一季度出货量继续下滑趋势,比起去年同期跌了13.9%
  • 非递归中序,后序遍历二叉树
  • Eclipse安装aptana
  • udp datetime服务
  • linux信号浅谈
  • hdu 2142 Can you find it?
  • 线程锁
  • Linux下禁用独立显卡
  • vue界面
  • 如何做项目?
  • babun windows配置
  • 【Leetcode】101. 对称二叉树
  • Google 是如何开发 Web 框架的
  • 2017前端实习生面试总结
  • 30天自制操作系统-2
  • crontab执行失败的多种原因
  • Flannel解读
  • Js基础知识(一) - 变量
  • node 版本过低
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • SQL 难点解决:记录的引用
  • underscore源码剖析之整体架构
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 关于springcloud Gateway中的限流
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 计算机在识别图像时“看到”了什么?
  • 批量截取pdf文件
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 数组大概知多少
  • 推荐一个React的管理后台框架
  • 用Visual Studio开发以太坊智能合约
  • MyCAT水平分库
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​水经微图Web1.5.0版即将上线
  • (1)虚拟机的安装与使用,linux系统安装
  • (c语言)strcpy函数用法
  • (ZT)出版业改革:该死的死,该生的生
  • (转)Windows2003安全设置/维护
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net/c# memcached 获取所有缓存键(keys)
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • @media screen 针对不同移动设备
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [Bugku]密码???[writeup]
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [C++]Leetcode17电话号码的字母组合
  • [C++基础]-初识模板
  • [codeforces]Checkpoints