步骤
0.准备需要的包
1.被代理的对象 / 普通 JavaBean
2.代理类
3.测试类
4.运行结果
5.工程代码
0.准备需要的包
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.5</version>
</dependency>
1.被代理的对象 / 普通 JavaBean
public class Student {
public void doWork() {
System.out.println("学生正在写作业");
}
}
2.代理类
代理类需要实现CallBack接口
public class CglibProxy implements MethodInterceptor{
private Enhancer enhancer = new Enhancer();
public Object getProxy(Class clazz) {
//指定生成代理类的父类
enhancer.setSuperclass(clazz);
//设置CallBack对象
enhancer.setCallback(this);
//通过字节码技术动态创建对象
return enhancer.create();
}
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("前置通知");
Object result = proxy.invokeSuper(obj, args);
System.out.println("后置处理");
return result;
}
}
上图实现的MethodInterceptor接口实现了Callback,所以可以使用
3.测试类
public class CglibTest {
public static void main(String[] args) {
CglibProxy proxy = new CglibProxy();
//生成student的代理对象
Student student = (Student) proxy.getProxy(Student.class);
student.doWork();
}
}
4.运行结果
5.工程代码
链接:https://pan.baidu.com/s/1HLWL9j_zBcDsm3PMlQhgPQ
提取码:euk4
失效请评论