Spring代理模式

来源:互联网 发布:阿里云个人网盘 编辑:程序博客网 时间:2024/05/17 22:40

1.静态代理

 抽象主题 :Subject 

public interface Subject {    public String add();}

目标对象:ReSubject 

public class ReSubject implements Subject {    public String add() {        System.out.println("ok!");        return "";    }}

 代理对象:Psubject 


public class Psubject implements Subject {    private Subject reSubject;    public Subject getReSubject() {        return reSubject;    }    public void setReSubject(Subject reSubject) {        this.reSubject = reSubject;    }    public String add() {        System.out.println("开启!");        return reSubject.add();    }}

单侧   


 //静态代理    @Test    public void test12(){        Subject subject=new ReSubject();        Psubject psubject=new Psubject();        psubject.setReSubject(subject);        psubject.add();    }

 

2.动态代理

接口

public interface IUserDAO {    public String add();    public String edit();}

 


public class UserDAOImpl implements IUserDAO{    public String add() {        System.out.println("add");        return "add";    }    public String edit() {        System.out.println("edit");        return "edit";    }}

单侧


//动态代理    @Test    public void test13(){       final IUserDAO dao=new UserDAOImpl();       IUserDAO pp=(IUserDAO) Proxy.newProxyInstance(dao.getClass().getClassLoader(), dao.getClass().getInterfaces(), new InvocationHandler() {           public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {               System.out.println("开启");               method.invoke(dao,args);               return null;           }       });       pp.add();       pp.edit();    }
复制代码

3.cglib动态代理

public class Userservice {    public void delete(){        System.out.println("ok");    }}

单侧(两种方式)

复制代码
 /*cglib动态代理*/    @Test    public void test14(){        final Userservice servive=new Userservice();        Enhancer enhancer=new Enhancer();        enhancer.setSuperclass(servive.getClass());        enhancer.setCallback(new MethodInterceptor() {            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {                System.out.println("开启");                methodProxy.invoke(servive,objects);                return null;            }        });       /* enhancer.setCallback(new org.springframework.cglib.proxy.InvocationHandler() {            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {                System.out.println("开启");                method.invoke(servive,objects);                return null;            }        });*/        Userservice aa =(Userservice) enhancer.create();        aa.delete();    }