AOP-Aspect-oriented programming
从代理机制初控AOP
如想在执行HelloSpeaker的hello()方法时留下日志消息,可以在hello()方法内部写log,或者说将执行log的程序横切入(Cross-cutting)到HelloSpeaker,但这样就使得HelloSpeaker关注了不属于它自己的业务逻辑。如果可以采取的代理的机制。
代理(Proxy)有两种:
静态代理-Static proxy
动态代理-Dynamic proxy
1. 静态代理
为实现静态代理需要为HelloSpeaker写一个HelloProxy类,同样实现IHello接口,并在hello方法执行log,并执行HelloSpeaker的hello()方法。
public void hello(String name){
log(“hello method start”);
helloObject.hello(name);
log(“hello method end….”);
}
其中helloObject为需要代理的对象,在其它地方如下来使用代理机制:
IHello proxy = new HelloProxy(new HelloSpeaker());
proxy.hello(“test”);
示例图:
2. 动态代理
import java.util.logging.*;
public Object invoke(Object proxy, Method method,
|
测试程序如下:
public static void main(String[] args) { LogHandler logHandler = new LogHandler();
IHello helloProxy = (IHello) logHandler.bind(new HelloSpeaker()); helloProxy.hello("Justin"); }
|