代理模式(动态代理)

动态代理。就是不用自己写代理类,只要实现接口就行了。

动态代理,这里介绍两种:jdk and cglib

第一个jdk

//一个接口类
public interface Book{
    void read(String name);
}

//一个实现类
public class BookImpl implements Book{
    @Override
    public void read(String name){
        System.out.println(name);
    }
}

//实现一个一个代理类接口
public class MyInvocationHandler implements InvocationHandler{
    private Object target;
    public MyInvocationHandler(Object target){
        this.target =target ;
    }
    @Override
    public Object invoke(Object o,Method method,Object[] args)throws Throwable{
    return method.invoke(target,args);
    }
}

//测试方法
Public class Main{
public static void main(String args[]){
    Book bookImpl = new BookImpl;
    Object obj = Proxy.newProxyInstance(bookImpl.getClass,
    )book,getClss().getInterface(),new myInvocation

}

cglib

//一个实现类
public class BookImpl {
    @Override
    public void read(String name){
        System.out.println(name);
    }
}

//实现一个一个代理类接口
public class MyInsterceptor implements MethodIntao{
    private Object target;
    public MyInvocationHandler(Object target){
        this.target =target ;
    }
    @Override
    public Object intercept(Object o,Method method,Object[] args,MethodProxy myInterce)throws Throwable{
    return method.invoke(target,args);
    }
}

//测试方法
Public class Main{
public static void main(String args[]){
    BookImpl book = new BookImpl();
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperClass (book.getClass);
    enhancer.setCallback(new MyInterceptor(book))
    BookImpl b = (BookImpl)enhancer.create();
}

猜你喜欢

转载自www.cnblogs.com/LixiaoFeng1650062546/p/11493787.html
今日推荐