springboot 集成druid 启动报 llegalAccessError

报错信息:

Caused by: org.springframework.cglib.core.CodeGenerationException: java.lang.IllegalAccessError-->class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper$$EnhancerBySpringCGLIB$$1a6f5eb1 cannot access its superclass com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper
  at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:539)
  at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:363)
  at org.springframework.cglib.proxy.Enhancer.generate(Enhancer.java:585)
  at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:110)
  at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:108)
  at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)
  at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)
  at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:134)
  at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:319)
  at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:572)
  at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:419)
  at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:57)
  at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:206)
  ... 81 common frames omitted
Caused by: java.lang.IllegalAccessError: class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper$$EnhancerBySpringCGLIB$$1a6f5eb1 cannot access its superclass com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
  at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.publicDefineClass(RestartClassLoader.java:173)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:535)
  ... 95 common frames omitted

报错关键字:DruidDataSourceWrapper
、cannot access its superclass

分析报错,spring 在aop 代理的时候使用了cglib 但是cglib 无法代理接口

下面来对比一下Cglib动态代理与JDK动态代理:

1.两者都是动态代理,都是运行时动态生成代理对象。

2.JDK动态代理利用的是接口信息来实现的代理,委托类必须实现某个或者某些接口,而Cglib则是利用继承关系,利用asm在运行时动态生成委托类的子类,从而实现对委托类的代理。因此不依赖接口。

3.Cglib由于是利用继承关系来实现代理的,因此无法代理被final修饰的类以及被final修饰的方法。

4.Cglib一般来说效率要比JDK动态代理效率更高,可以实现的代理也更为强大。

解决办法:

配置文件中增加

spring:
	aop:
    	proxy-target-class: true

参考资料:https://www.oschina.net/question/2342541_2319258

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值