17.设计模式-代理模式-cglib动态代理
//1.引入pom依赖
//2.任意类,无需实现接口
//3.创建代理类,实现MethodInterceptor拦截器,重新intercept方法
//4.测试
public class StudentDao{
public String study(String name) {
System.out.println(name + " 正在学习中....");
return "学习结束!";
}
}
public class ProxyFactory implements MethodInterceptor {
//维护一个目标对象,Object
private Object target;
//构造器,对target进行初始化
public ProxyFactory(Object target) {
this.target = target;
}
public Object getProxyInstance(){
//1.创建工具类
Enhancer enhancer=new Enhancer();
//2.设置父类
enhancer.setSuperclass(target.getClass());
//3.设置回调函数
enhancer.setCallback(this);
//4.设置子类对象,即代理对象
return enhancer.create();
}
//重写intercept方法,会调用目标方法
public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
System.out.println("开始使用cglib代理....");
return method.invoke(target,args);
}
}
public class Test {
public static void main(String[] args) {
StudentDao target = new StudentDao();
ProxyFactory factory=new ProxyFactory(target);
StudentDao student = (StudentDao)factory.getProxyInstance();
String reslut = student.study("王五");
System.out.println(reslut);
}
}