Cglib代理demo

步骤

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 


失效请评论


猜你喜欢

转载自blog.csdn.net/weixin_42195284/article/details/84975851