17.设计模式-代理模式-cglib动态代理

//1.引入pom依赖
//2.任意类,无需实现接口
//3.创建代理类,实现MethodInterceptor拦截器,重新intercept方法
//4.测试

cglib cglib 3.3.0

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);
}
}

posted @ 2022-10-11 22:12  NIANER2011  阅读(20)  评论(0编辑  收藏  举报