spring transaction 注解方法报错Can not set field to proxy

应用Spring典型场景:接口+实现,初始化时自动注入。

应用transaction注解方法的典型场景:接口+实现,在实现整个类上加注解或一个特定方法上加注解。

运行时出现这样的错误:

Caused by: java.lang.IllegalArgumentException: Can not set xxxxxx field yyyyyy to com.sun.proxy.$ProxyNNNNNN


出现错误原因:

代码中出现了对实现的初始化,而配置文件中没有将AOP由默认的针对接口设置成针对类的。因此有两种解决方法:

一、配置文件中将

<tx:annotation-driven transaction-manager="transactionManager"/>

改成

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

这样就把默认为针对接口的AOP就变成了针对类的。


二、修改初始化的方法

自动注入我目前接触了三种方法初始化:

@Autowired

Interface interface;


@Autowired

Implementation implementaion;


@Autowired

@Qualifier("implementation") 

Interface implementaion;

这三种方法在大多数时候不会引起麻烦。但是应用场景略有不同。如果接口+实例的模型中,实例不止一个,只能用后面两种;但是后面两种的第二种是针对接口的,第一种是针对类的。所以用第一(一个实例)和第三种方法初始化。


上面两种解决方案我倾向于第二种,因为有时候我们需要加入断点以调试。第一种方法在transaction里加入断点会出现cannot set breakpoint类似的错误。

(我是JAVA小学生,不当请指正)


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值