Case:spring-mybatis配置事务的时候报错,错误如下:
Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy8
at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:446)
at net.sf.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285)
at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:201)
... 37 more
[org.apache.ibatis.session.defaults.DefaultSqlSession@c5577c] was not registered for synchronization because synchronization is not active 2014-05-09 17:47:26 [org.springframework.jdbc.datasource.DataSourceUtils]-[DEBUG] Fetching JDBC Connection from DataSource 2014-05-09 17:47:26 [org.mybatis.spring.transaction.SpringManagedTransaction]-[DEBUG] JDBC Connection [32681756(oracle.jdbc.driver.OracleConnection@1664a9b)] will not be managed by Spring
解决过程:
查看配置,发现 proxy-target-class="true"导致问题,此配置加上后会导致spring默认全部使用CGLIB进行代理,使用CGLIB的时候需要考虑一下问题:
Scanning for mappers1.final methods cannot be advised, as they cannot be overridden. 2.As of Spring 3.2, it is no longer necessary to add CGLIB to your project classpath, as CGLIB classes are repackaged under org.springframework and included directly in the spring-core JAR. This means that CGLIB-based proxy support 'just works' in the same way that JDK dynamic proxies always have. 3.The constructor of your proxied object will be called twice. This is a natural consequence of the CGLIB proxy model whereby a subclass is generated for each proxied object. For each proxied instance, two objects are created: the actual proxied object and an instance of the subclass that implements the advice. This behavior is not exhibited when using JDK proxies. Usually, calling the constructor of the proxied type twice, is not an issue, as there are usually only assignments taking place and no real logic is implemented in the constructor.
由于Mybatis-spring中支持使用org.mybatis.spring.SqlSessionFactoryBean或者Scanning for mappers(<mybatis:scan/>、@MapperScan 、MapperScannerConfigurer)配置Mapper接口bean对象,每个Mapper的实现类似由框架自动创建final class $Proxy,故会出现上述问题。JDK dynamic proxies使用组合的target object的方式,故没有上述问题。
上述的第二个问题,仔细检查客户端配置,一般是配置问题。
相关推荐
问题记录跟踪表,可以针对问题记录分析。
标题中的"C# WinForm问题记录器"是一款使用C#编程语言和Windows Forms(WinForm)框架开发的应用程序,专门设计用于记录和管理个人在学习或工作中遇到的技术问题及其解决方案。这款工具可以帮助用户有效地整理和回顾...
该模板可适用于各种软件开发过程中,评审过程问题记录。给出问题记录的模板,属于评审行为的过程文档。
oracle迁移到mysql问题记录
《顾客问题记录与处理表格格式》是IT服务管理中一种重要的文档工具,主要用于记录和跟踪客户在使用产品或服务过程中遇到的问题,以便于提供高效、准确的解决方案。这份表格的结构设计涵盖了问题的各个方面,有助于...
顾客问题记录与处理报告 本篇文章旨在详细介绍顾客问题记录与处理报告的重要性、构成要素、实际应用场景和相关知识点,旨在为企业管理和质量控制提供有价值的参考依据。 一、顾客问题记录与处理报告的重要性 在...
问题记录app
该文档用于软件项目管理过程,是项目实施过程中阶段评审活动的输出。
主要记录个人在进行后仿时的操作步骤和遇到的一些小问题,仅供个人记录,偶这个脑子哦
首先,痛点在于缺乏有效的问题记录和追踪机制。在项目结束后,回顾问题时,往往只能依赖于经过责任划分后的人为描述,这些描述可能偏离原始问题,导致改进措施的有效性受限。此外,生活中的决策也常因缺乏详细信息...
一个方便记录运维人员解决客户端各种问题时效的数据库模板,可编辑问题的类型,记录问题创建的时间、解决过程、最终结果、过后查询
开发常见问题记录.txt
《顾客问题记录与处理》是北京威奥特信通科技有限公司的质量体系程序文件,旨在规范对顾客问题的记录和处理流程,确保及时有效地解决客户遇到的问题,提高客户满意度。文件编号为WAYOUT-QF-22V2.0,由杨梅、赵庆轩和...
亚马逊新开发者账号SP-API Developer申请的时候,需要填写的问题
《产品新需求和问题记录单》是IT行业中用于管理和跟踪产品开发过程中需求变更及问题解决的重要文档。这个记录单主要用于收集、记录、分析以及解决与产品相关的新需求和已出现的问题,确保产品的质量和功能满足客户的...
IMB MQ 报错问题记录
开发问题记录55555
升级openssh问题记录
1.4-疑难问题记录表-V1.0.xls