- 浏览: 495624 次
- 性别:
- 来自: OnePiece
文章分类
- 全部博客 (196)
- --------- 基础----------- (0)
- java 碎碎念 (12)
- java 并行编程 (11)
- java I/O (6)
- java Charset & Encoding (2)
- spring学习笔记 (8)
- 正则表达式 (5)
- web前端-javascript (11)
- web前端-jQuery (7)
- web前端-碎碎念 (1)
- mybatis (0)
- 数据库-通用 (8)
- 数据库-oracle (20)
- nosql-redis (11)
- nosql-mongoDB (1)
- xml (2)
- log4j (2)
- uml (3)
- web services: soap/wsdl (6)
- soa-tuscany (2)
- linux (6)
- ----------修养----------- (0)
- 深入理解java虚拟机 (7)
- java 设计模式 (9)
- 数据结构和算法 (2)
- 读书笔记--代码整洁之道 (2)
- 计算机基础 (1)
- -----------践行---------- (0)
- 重构(refactor) (7)
- jvm-诊断 (4)
- 数据库-让oracle跑得更快 (7)
- Nginx (6)
- ehcache (2)
- 短信开发 (1)
- Servlet+Filter+Listener (2)
- 运维 (6)
- 问题记录 (38)
- 杂七杂八 (12)
最新评论
-
zhanggang807:
第二种方法比较好
<spring> 定时任务每次都执行两次的问题,慎用new ClassPathXmlApplicationContext() -
assasszt:
谢谢分享,很清楚的讲明了原理。
字符集与字符编码简介 -
su0nils000:
难得的笔记
<进阶-2> 打造高效正则表达式 -
足至迹留:
mini188 写道用MD5来解决碰撞是不是也是可行的呢?个人 ...
Hash简介 -
mini188:
用MD5来解决碰撞是不是也是可行的呢?
Hash简介
1. 问题描述
往工程里添加切面,定义了<aop:aspectj-autoproxy/>,切的是实现了接口的类,这样的话使用jdk代理应该没啥问题。但是启动时报错:
2. 问题分析
这个异常一般是代理问题,根据异常中的com.sun.proxy.$Proxy23可以判断。但是奇怪的是为什么会类型不对,动态代理接口应该没有问题,于是查找工程中其他地方是否也使用了代理相关的功能。
1)因为有好几个spring配置文件,就搜索有没有其他<tx:annotation-driven/>, <aop:aspectj-autoproxy/> 或<aop:config/>,如果有的话就看下是否有proxy-target-class="true"的配置 ---结果没有
2)查看是否有注解@Transactional的使用 -- 找到
发现@Transactional是加在**DAO方法上的,但是这个DAO没有实现接口,而是继承的父DAO类。问题明确了,动态代理只能代理实现了接口且是接口里定义的方法,否则就会强制使用cglib代理。即使DAO类实现的是接口,但@Transactional加在了不是接口里定义的方法上,仍然会走cglib代理,本人遇到的就是这个问题。
根据spring的讲解(http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-proxying):
所以就强制所有代理都使用了cglib。cglib代理后生成的类型是类,不能转成接口,这里期待的类型也是类,但新增的切面仍然使用了<aop:aspectj-autoproxy/>的配置,jdk代理。这个代理类类型与期待的接口的实现类类型不符合,造成异常。
3. 解决办法
显式加上proxy-target-class="true",配置成<aop:aspectj-autoproxy proxy-target-class="true"/>
可以参考:
官方: https://jira.spring.io/browse/SPR-11859
http://jinnianshilongnian.iteye.com/blog/1901694
http://jinnianshilongnian.iteye.com/blog/1894465
补充:
spring @Transactional代理注意事项:
@Transactional 的事务开启 ,或者是基于接口的 或者是基于类的代理被创建。所以在同一个类中一个方法调用另一个方法有事务的方法,事务是不会起作用的。
更多事项参考:http://blog.sina.com.cn/s/blog_667ac0360102ebem.html
往工程里添加切面,定义了<aop:aspectj-autoproxy/>,切的是实现了接口的类,这样的话使用jdk代理应该没啥问题。但是启动时报错:
BeanNotOfRequiredTypeException org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'x' must be of type [y], but was actually of type [com.sun.proxy.$Proxy23]
2. 问题分析
这个异常一般是代理问题,根据异常中的com.sun.proxy.$Proxy23可以判断。但是奇怪的是为什么会类型不对,动态代理接口应该没有问题,于是查找工程中其他地方是否也使用了代理相关的功能。
1)因为有好几个spring配置文件,就搜索有没有其他<tx:annotation-driven/>, <aop:aspectj-autoproxy/> 或<aop:config/>,如果有的话就看下是否有proxy-target-class="true"的配置 ---结果没有
2)查看是否有注解@Transactional的使用 -- 找到
发现@Transactional是加在**DAO方法上的,但是这个DAO没有实现接口,而是继承的父DAO类。问题明确了,动态代理只能代理实现了接口且是接口里定义的方法,否则就会强制使用cglib代理。即使DAO类实现的是接口,但@Transactional加在了不是接口里定义的方法上,仍然会走cglib代理,本人遇到的就是这个问题。
根据spring的讲解(http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-proxying):
引用
Multiple <aop:config/> sections are collapsed into a single unified auto-proxy creator at runtime, which applies the strongest proxy settings that any of the <aop:config/> sections (typically from different XML bean definition files) specified. This also applies to the <tx:annotation-driven/> and <aop:aspectj-autoproxy/> elements.
To be clear: using ' proxy-target-class="true"' on <tx:annotation-driven/>, <aop:aspectj-autoproxy/> or <aop:config/> elements will force the use of CGLIB proxies for all three of them.
So be careful when defining these tags in multiple xml configuration files.
To be clear: using ' proxy-target-class="true"' on <tx:annotation-driven/>, <aop:aspectj-autoproxy/> or <aop:config/> elements will force the use of CGLIB proxies for all three of them.
So be careful when defining these tags in multiple xml configuration files.
所以就强制所有代理都使用了cglib。cglib代理后生成的类型是类,不能转成接口,这里期待的类型也是类,但新增的切面仍然使用了<aop:aspectj-autoproxy/>的配置,jdk代理。这个代理类类型与期待的接口的实现类类型不符合,造成异常。
3. 解决办法
显式加上proxy-target-class="true",配置成<aop:aspectj-autoproxy proxy-target-class="true"/>
可以参考:
官方: https://jira.spring.io/browse/SPR-11859
http://jinnianshilongnian.iteye.com/blog/1901694
http://jinnianshilongnian.iteye.com/blog/1894465
补充:
spring @Transactional代理注意事项:
@Transactional 的事务开启 ,或者是基于接口的 或者是基于类的代理被创建。所以在同一个类中一个方法调用另一个方法有事务的方法,事务是不会起作用的。
更多事项参考:http://blog.sina.com.cn/s/blog_667ac0360102ebem.html
发表评论
-
修改第三方源码并重新打包
2017-02-14 17:05 29531.场景 很多时候需要下载第三方源码修改并重新编译打包,比如m ... -
内部类引发的cglib创建失败
2016-11-22 14:48 15541. 问题描述 使用cglib库 ... -
super用在了匿名内部类里
2016-07-06 09:47 12881.问题描述 本来是重构时在父类里增加了一个protected ... -
<spring-expected at least 1 matching bean> 缺少bean定义
2016-03-04 10:37 14531. 问题描述 ... Error creating bean ... -
《IDEA 循环依赖》Annotation processing is not supported for module cycles.
2015-11-04 16:30 371351. 错误现象 Error:java: Annotation ... -
数据库小问题集合
2015-09-23 14:58 6931. mysql默认查询时,不区分字母大小写。 比如:sele ... -
slf4j 的MDC (附带主动获取方法堆栈)
2015-08-03 17:29 53921. 主动获取方法调用链 ... -
<Spring-Aspect> 切面类(@Aspect)首先必须是bean
2015-07-20 14:08 37281. 问题描述 今天发现老工程里有个日志切面但是总是也没有执行 ... -
<tomcat> 启动报错 Error listenerStart
2015-07-10 09:32 3413今天同事遇到一个tomcat启动失败的问题,日志信息很少,不知 ... -
Intellij IDEA--can't use subversion command line client : svn
2015-06-04 10:45 172331. 错误描述 初用IDEA,暂时感到的还是不适应。导入工程报 ... -
<myeclipse> 修改Source Folder
2015-04-27 16:25 1669MyEclipse工程里新增文件夹时有普通Folder和Sou ... -
<maven> 新工程打包遇到Access restriction
2015-04-27 16:17 11831、错误描述 Access restriction: The ... -
<线程池-定时任务> ScheduledExecutorService之shutdown引发的RejectedExecutionException问题
2015-03-20 21:32 5563一、 问题描述 先来看一下异常信息,启动tomcat时就报错: ... -
<windows, tomcat> tomcat安装为windows服务,查看windows服务器启动时间
2015-03-12 10:47 1646一、tomcat安装为windows服务 1.已经安装好的to ... -
<spring> 定时任务每次都执行两次的问题,慎用new ClassPathXmlApplicationContext()
2015-02-26 14:17 58101.问题描述 singleton的bean,spring配置定 ... -
<ajax> 给$.post()的回调方法传递多个参数
2015-01-16 14:10 38301.问题描述 想给$.post()的回调方法传递多个参数,如果 ... -
<js,jquery>正则表达式不需要用引号包围
2015-01-04 16:20 1103js或jquery里的正则表达式不能用"" ... -
<js,jquery> each里的continue和break效果
2015-01-04 16:17 747通常js或jquery里each比for用的更多,for循环里 ... -
chrome的粘贴带有样式
2014-12-28 22:02 12081.问题描述 页面div里的内容是带样式的,需要复制里面的纯文 ... -
<db> order by 时sqlserver认为null是最大值
2014-12-22 10:52 1206order by时sqlserver和oracle对null值 ...
相关推荐
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE...
赠送jar包:spring-aop-5.2.0.RELEASE.jar; 赠送原API文档:spring-aop-5.2.0.RELEASE-javadoc.jar; 赠送源代码:spring-aop-5.2.0.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.2.0.RELEASE.pom;...
总结起来,"spring-aop-jar"涉及了Spring框架中的面向切面编程模块,包括Spring AOP和AspectJ的集成。通过理解和熟练使用这些组件,开发者可以有效地解耦关注点,提高代码的可维护性和可扩展性。在实际项目中,结合...
赠送jar包:spring-aop-5.0.8.RELEASE.jar; 赠送原API文档:spring-aop-5.0.8.RELEASE-javadoc.jar; 赠送源代码:spring-aop-5.0.8.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.0.8.RELEASE.pom;...
在XML配置中,我们创建一个`<aop:config>`元素,并定义`<aop:aspect>`子元素来声明切面: ```xml <aop:config> <aop:aspect id="loggingAspect" ref="loggingAspectBean"> <!-- ... --> </aop:aspect> </aop:...
赠送jar包:spring-aop-5.0.10.RELEASE.jar; 赠送原API文档:spring-aop-5.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-aop-5.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.0.10.RELEASE....
赠送jar包:spring-aop-5.3.10.jar; 赠送原API文档:spring-aop-5.3.10-javadoc.jar; 赠送源代码:spring-aop-5.3.10-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.3.10.pom; 包含翻译后的API文档:spring...
spring-aop-5.3.22.jar Spring AOP provides an Alliance-compliant aspect-oriented programming implementation allowing you to define method interceptors and pointcuts to cleanly decouple code that ...
spring-aop-6.0.2.jar
赠送jar包:spring-aop-5.3.12.jar; 赠送原API文档:spring-aop-5.3.12-javadoc.jar; 赠送源代码:spring-aop-5.3.12-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.3.12.pom; 包含翻译后的API文档:spring...
spring-aop-5.2.0.RELEASE
赠送jar包:spring-aop-5.2.15.RELEASE.jar; 赠送原API文档:spring-aop-5.2.15.RELEASE-javadoc.jar; 赠送源代码:spring-aop-5.2.15.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.2.15.RELEASE....
spring-aop-3.2.5.RELEASE.jar
spring-aop-3.2.0.RELEASE.jar,一个Spring中AOP的jar包
赠送jar包:spring-aop-5.1.3.RELEASE.jar; 赠送原API文档:spring-aop-5.1.3.RELEASE-javadoc.jar; 赠送源代码:spring-aop-5.1.3.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.1.3.RELEASE.pom;...
赠送jar包:spring-aop-4.3.20.RELEASE.jar 赠送原API文档:spring-aop-4.3.20.RELEASE-javadoc.jar 赠送源代码:spring-aop-4.3.20.RELEASE-sources.jar 包含翻译后的API文档:spring-aop-4.3.20.RELEASE-...
spring-aop-4.0.4.RELEASE 的jar包,亲测可用。。。。
spring-aop.jarspring-aop.jarspring-aop.jarspring-aop.jarspring-aop.jarspring-aop.jarspring-aop.jarspring-aop.jarspring-aop.jarspring-aop.jar
spring-aop-5.0.4.RELEASE.jar。