Cannot proxy target class because CGLIB2 is not available y: org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
at org.springframework.aop.framework.DefaultAopProxyFactory.createAopProxy(DefaultAopProxyFactory.java:67)
at org.springframework.aop.framework.ProxyCreatorSupport.createAopProxy(ProxyCreatorSupport.java:106)
at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:110)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:490)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:365)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:325)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:361)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1344)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
... 38 more
解决方法:
1.缺少CGlib,把CGLIB Jar包放入项目就可以了.
2. 没有实现任何接口的时候也会报这个错误!
注:cglib不包含asm,cglib-nodep包含了asm,而asm是cglib必须的三方类库,出现两个版本的原因恐怕是要避免框架集成时的版本冲突吧。
======================================================================
Cannot convert value of type [$Proxy0 implementing org.springframework.beans.factory.InitializingBean,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [dao.UserDaoImp] for property 'userDao': no matching editors or conversion strategy found
就异常显示的信息可以看到,Spring在转换时,主要是将代理类转换成接口,而不能转换成实际类。
解决办法:
1.如果在Spring配置文件中配置的事务是通过AOP标签实现的,那就在<aop:config />中增加proxy-target-class="true"属性。
2.使实际的类实现某个接口(UserDaoImp实现UserDao接口)
分享到:
相关推荐
关于Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.和 java.lang.ClassNotFoundException: org.objectweb.asm.Type错误的解决方法: 就是...
org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces 从异常信息可以看出是cglib的问题...
nginx: [emerg] “proxy_cache_path” directive is not allowed here in /etc/nginx/conf.d/default.conf:29 提示意思“proxy_cache_path指令不被允许”,在官网上查找了相关说明,也没有发现问题,最后看应用范围...
System.out.println("Doing something in the target class"); } } class MyMethodInterceptor implements MethodInterceptor { @Override public Object intercept(Object obj, Method method, Object[] args,...
- target/classes:编译后的class文件,包括目标接口和实现类的class文件,以及由Proxy生成的代理类class文件 - 测试代码:展示如何使用Proxy创建代理对象并调用方法 2. CGLib代理项目: - src/main/java:包含...
TargetClass proxyInstance = (TargetClass) enhancer.create(); // 调用代理对象的方法 proxyInstance.targetMethod(); } } class TargetClass { public void targetMethod() { System.out.println("Target ...
总的来说,JDK的Proxy适用于实现了接口的目标对象,而CGLIB则适用于未实现接口的对象。两者都可以帮助我们在不修改原有代码的情况下,通过代理对象在调用方法前后插入额外的逻辑,实现AOP的功能。在Spring框架中,这...
HelloInterface target2 = (HelloInterface) Proxy.newProxyInstance( Demo.class.getClassLoader(), new Class[]{HelloInterface.class}, invocationHandler); target2.sayHello(); ``` 当调用`target2....
2. **配置**:在Spring框架中,如果需要使用CGLIB进行AOP代理,需要在配置文件中启用CGLIB代理,例如在XML配置中添加 `<aop:aspectj-autoproxy/>` 或者在Java配置中使用 `@EnableAspectJAutoProxy(proxyTargetClass ...
class ServiceProxy implements Service { private Service target; public ServiceProxy(Service target) { this.target = target; } @Override public void doSomething() { before(); target....
2. **无需接口**:CGLib可以对没有实现接口的类进行代理,这是Java动态代理(JDK Proxy)无法做到的。 3. **广泛支持**:许多知名框架如Spring AOP、Hibernate等都使用了CGLib作为底层的动态代理技术。 ### 应用...
System.out.println("Target method is executed."); } } } ``` 在这个例子中,`MyTargetClass`是我们要代理的类,通过`Enhancer`我们创建了一个它的子类并设置了一个拦截器。当我们通过代理对象调用`...
2. **创建Enhancer对象**:CGLIB的`net.sf.cglib.proxy.Enhancer`类是用于生成代理对象的核心工具。 3. **设置回调**:通过`setCallback()`或`setCallbacks()`方法,我们可以设置代理的回调策略,这类似于JDK动态...
2. **Cglib基本使用步骤**: - 引入Cglib依赖:在项目中引入Cglib相关的jar包,通常通过Maven或Gradle管理。 - 创建Enhancer实例:Enhancer是Cglib的核心类,它负责生成代理对象。 - 设置被代理的目标对象:通过...
JDK动态代理和CGLIB代理是两种常用的实现方式。 首先,我们来看看JDK动态代理。JDK动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。Proxy类用于创建一个代理对象...
Java中的CGLib与反射是两种常用的动态代理技术,它们在实现面向切面编程(AOP)时发挥着重要作用。本文将深入探讨这两种技术,并通过一个简单的AOP demo来阐述它们的使用方法。 首先,让我们了解什么是CGLib。CGLib...
5. **Proxy**:CGLib也提供了一套与JDK的java.lang.reflect.Proxy类似的API,方便开发者使用。 在实际应用中,CGLib不仅用于动态代理,还可以用于性能优化、日志记录、测试、内存数据库等场景。例如,在单元测试中...