aop动态代理

来源:互联网 发布:宝宝模样合成软件 编辑:程序博客网 时间:2024/06/05 08:44

目标类接口

public interface TargetInterface {     void biz1();     void biz2();     void biz3();}

代理切入目标

public class Targets implements TargetInterface{    @Override    public void biz1() {            System.out.println("业务1");    }    @Override    public void biz2() {            System.out.println("业务2");    }    @Override    public void biz3() {            System.out.println("业务3");    }}

切面对象

public class Aspector {    public void pointcut1() {        System.out.println("切入点1");    }    public void pointcut2() {        System.out.println("切入点2");    }    public void pointcut3() {        System.out.println("切入点3");    }}

代理类

public class Proxys implements InvocationHandler{        private Object obj;//目标对象        private Aspector aspect;        public Object bind(Object obj,Aspector aspect) {            this.obj = obj ;            this.aspect = aspect;            return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);        }        @Override        public Object invoke(Object proxy, Method method, Object[] args)                throws Throwable {            aspect.pointcut1();//切入点            Object o = method.invoke(obj, args);//代理对象            aspect.pointcut2();            aspect.pointcut3();            return o;        }}

测试类

public class TestProxy {    @Test    public void demo(){        Proxys p = new Proxys();//代理类        Targets t = new Targets();//代理切入目标        Aspector a = new Aspector();//切面对象        TargetInterface bf = (TargetInterface) p.bind(t,a);//目标类接口        bf.biz1();    }}