cglib 动态代理
1、引入字节码操作框架相关jar包,创建被代理类:
package proxy.cglib;
public class Tom {
public void findLove(){
System.out.println("寻找灵魂伴侣");
};
}
2、创建代理类:
package proxy.cglib;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class CglibProxy implements MethodInterceptor {
public Object getInstance(Class<?> clazz) throws Exception{
Enhancer enhancer=new Enhancer();
//要把哪个设置为即将生成的新类的父类
enhancer.setSuperclass(clazz);
//由自己调用
enhancer.setCallback(this);
return enhancer.create();
}
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
//业务的增强
System.out.println("这里是珍爱网,已拿到你的要求,帮你寻找真爱");
methodProxy.invokeSuper(o,objects);
System.out.println("有情人终成眷属");
return null;
}
}
3、测试:
package proxy.cglib;
public class CglibProxyTest {
public static void main(String[] args) {
try {
Tom tom=(Tom)new CglibProxy().getInstance(Tom.class);
tom.findLove();
System.out.println(tom.getClass());
} catch (Exception e) {
e.printStackTrace();
}
}
}
cglib实现的动态代理,被代理类不需要实现接口。