Spring代理模式

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();
    }
复制代码
posted @ 2017-08-20 08:45  我的MyBatis  阅读(395)  评论(0编辑  收藏  举报