【错误主要信息】org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService' defined in file [D:\eclipse-jee\workspace\spring\Spring_1801_Spring_Hibernate_Transaction\bin\com\bjsxt\service\UserService.class]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Cannot proxy target class becauseCGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
【错误原因】Caused by: org.springframework.aop.framework.AopConfigException: Cannot proxy target class becauseCGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
今天在做Spring整合Hibernate的实验的时候,前面一直都按照文档里面的配置来的,没有什么问题。
然后在做事务处理的时候,报了一个错(如上错误信息所示),找了半天终于找到了解决办法。
大家看我报错的内容,特别是我加红的部分,其实就特别明显了,CGLIB2多次出现,其实我也不知道是什么意思,查一下吧。
CGLIB:(Code Generation Library) 是一个Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO(Persistent Obeject 持久化对象)字节码的动态生成。
CGLIB是一个强大的高性能的代码生成包。它广泛的被许多AOP(Aspect Oriented Propramming 面向切面编程)的框架使用,例如Spring AOP和dynaop,为他们提供方法的interception(拦截)。
说白了,就是缺少cglib-nodep-2.1_3.jar包,导入后异常消除。
我是导入到我自己建的这个Spring的包集合里面,(你们根据情况具体分析)
在Java中利用动态代理实现数据库连接与事务的自动管理,如何使用Java动态代理?
要求被代理对象要实现一个接口,如果不想实现接口怎么办呢?使用开源的cglib可以实现对一个类对象的代理,而不要求实现接口。
使一个没有实现接口的普通类也可以以注解的方式来自动打开数据库连接和事务,当然是通过cglib来实现的。
因为cglib通过这种实现代理是通过生成被代理类的子类来实现,被代理的类不能是final的,即需要能够被继承。另外,对static的方法也是无效的。
类似这种org.sring.....的报错有很多不同的样式,一般都是缺少包,我们只需要查到缺少哪个包,然后导入即可,导入的时候,要仔细。。
--------------------------------------------------------------------
原文地址:https://neveryu.github.io/guestbook/
Github: https://github.com/Neveryu
本文详细解析了在Spring整合Hibernate过程中遇到的一个典型错误——由于缺少CGLIB2而导致的Bean创建异常。文中不仅介绍了CGLIB的基本概念及其在Spring AOP中的作用,还提供了具体的解决方案。
561

被折叠的 条评论
为什么被折叠?



