Cglib学习报错 java.lang.reflect.InvocationTargetException-->null

Posted 奋力的蜗牛MMD

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cglib学习报错 java.lang.reflect.InvocationTargetException-->null相关的知识,希望对你有一定的参考价值。

package javacore.testForCglibProxy;

 

import java.lang.reflect.Method;

 

import net.sf.cglib.proxy.Enhancer;

import net.sf.cglib.proxy.MethodInterceptor;

import net.sf.cglib.proxy.MethodProxy;

 

public class GetNewBook {

public static void main(String[] args) {

 

cglibProxy cp = new cglibProxy();

gg gnb1 = (gg)cp.getProxy(new gg());

gnb1.GetBook();

}

}

 

class cglibProxy implements MethodInterceptor{

Object target ;

public Object getProxy(Object target){

this.target=target;

Enhancer ch = new Enhancer();

ch.setSuperclass(this.target.getClass());

ch.setCallback(this);

return ch.create();

}

 

@Override

public Object intercept(Object obj, Method method, Object[] args,

MethodProxy proxy) throws Throwable {

// TODO Auto-generated method stub

System.out.println("开始");

proxy.invokeSuper(obj, args);

System.out.println("结束");

return null;

 

}

 

}

 

class gg{

public void GetBook() {

// TODO Auto-generated method stub

System.out.println("get book");

}

}

 

当Class  gg 的修饰符非public的时候 会报错 cannot access its superclass  

 

Exception in thread "main" net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null

at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:237)

at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)

at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285)

at javacore.testForCglibProxy.cglibProxy.getProxy(GetNewBook.java:25)

at javacore.testForCglibProxy.GetNewBook.main(GetNewBook.java:13)

Caused by: java.lang.reflect.InvocationTargetException

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:497)

at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:384)

at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219)

... 4 more

Caused by: java.lang.IllegalAccessError: class $javacore.testForCglibProxy.gg1$$EnhancerByCGLIB$$bf75381d cannot access its superclass javacore.testForCglibProxy.gg1

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:760)

... 10 more

 

以上是关于Cglib学习报错 java.lang.reflect.InvocationTargetException-->null的主要内容,如果未能解决你的问题,请参考以下文章

Java反射机制

java.lang.reflect.InvocationTargetException java.lang.NoClassDefFoundError: com/google/common/io/Lim

解决升级到JDK17后cglib报错Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass()

解决升级到JDK17后cglib报错Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass()

原创学习CGLIB动态代理中遇到的问题

cglib源码学习交流