调用方通过代理对象间接对目标进行调用,代理对象就可以在执行目标对象的方法前后进行些额外的操作。
调用接口里定义的方法,代理对象和目标对象共同作为接口实现类,代理对象在方法里调用目标对象的同名方法,并在执行前后做自定义的额外操作。
代理模式(設計模式) UML
被代理對象與代理對象實現相同接口
代理對象引用被代理對象
客戶端只引用接口
代理AOP對象 示意圖
54444444444444444444444444444444
77777777777777777777777777777
代理模式。
被代理接口类:
/**
* Created by cat on 2017-02-27.
*/
public interface Subject {
void request();
void hello();
}
实现被代理类接口的代理类:
public class RealSubject implements Subject{
@Override
public void request() {
System.out.println("real subject execute request");
}
@Override
public void hello() {
System.out.println("hello");
}
}
代理对象的类:
public class Proxy implements Subject{
private RealSubject realSubject;
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
@Override
public void request() {
System.out.println("before");
try{
realSubject.request();
}catch (Exception e){
System.out.println("ex:"+e.getMessage());
throw e;
}finally {
System.out.println("after");
}
}
@Override
public void hello() {
realSubject.hello();
}
}
客户端调用代理类:实际调用的是代理的实现类,而代理的实现类具体业务又是委托给RealSubject来执行的
/**
* Created by cat on 2017-02-27.
*/
public class Client {
public static void main(String[] args){
Subject subject = new Proxy(new RealSubject());
subject.request();
}
}
1、客户端通过接口引用目标对象或代理对象,这里体现了面向对象的面向接口,客户端调用的目标对象的方法,代理对象都要有,因此目标对象和代理对象共同作为接口的实现类
2、代理对象把真正的方法委托给目标对象来执行,自己就执行额外的也就是AOP要织入的逻辑,即客户端调用代理的方法,同时给代理类传入目标对象,在代理类里面代理类通过目标对象来调用目标类的方法,在执行方法前后加上代理类的逻辑
代理AOP对象
caller:调用方
target:目标对象
proxy:代理对象
客户端通过代理对象间接地和目标对象交互
目标对象委托了代理对象来跟客户端交互
静态代理示意图
1、客户端通过接口引用目标对象或代理对象,这里体现了面向对象的面向接口,客户端调用的目标对象的方法,代理对象都要有,因此目标对象和代理对象共同作为接口的实现类
2、代理对象把真正的方法委托给目标对象来执行,自己就执行额外的也就是AOP要织入的逻辑,即客户端调用代理的方法,同时给代理类传入目标对象,在代理类里面代理类通过目标对象来调用目标类的方法,在执行方法前后加上代理类的逻辑
1.面向接口编程
客户端通过接口引用目标对象或代理对象,这里体现了面向对象的面向接口,客户端调用的目标对象的方法,代理对象都要有,因此目标对象和代理对象共同作为接口的实现类
2。代理对象把真正的方法委托给目标对象来执行,自己就执行额外的也就是AOP要织入的逻辑
即客户端调用代理的方法,同时给代理类传入目标对象,在代理类里面代理类通过目标对象来调用目标类的方法,在执行方法前后加上代理类的逻辑
代理AOP对象
caller:调用方
target:目标对象
proxy:代理对象
客户端通过代理对象间接地和目标对象交互
目标对象委托了代理对象来跟客户端交互
因此代理对象可以在执行目标对象方法前做一些操作
本节的测试
1
proxy_demo/
com.imooc.pattern
1.面向接口编程
客户端通过接口引用目标对象或代理对象,这里体现了面向对象的面向接口,客户端调用的目标对象的方法,代理对象都要有,因此目标对象和代理对象共同作为接口的实现类
2。代理对象把真正的方法委托给目标对象来执行,自己就执行额外的也就是AOP要织入的逻辑
即客户端调用代理的方法,同时给代理类传入目标对象,在代理类里面代理类通过目标对象来调用目标类的方法,在执行方法前后加上代理类的逻辑
caller:调用方
target:目标对象
proxy:代理对象
客户端通过代理对象间接地和目标对象交互
目标对象委托了代理对象来跟客户端交互
因此代理对象可以在执行目标对象方法前做一些操作
代理对象会把正真的业务逻辑委托给实际对象 而代理对象只会进行一写边缘的附加操作 这就是aop的实现原理
spring aop
代理对象调用目标对象的方法产生的异常需要抛出去,不能处理,因为代理对象的作用是对目标对象进行增强,不会对目标对象进行改变