今天在看林信良先生写的<spring技术手册>,在介绍AOP时,书中讲到了代理的一些原理,在这里对代理进行了一下小结,感觉收获挺多,做了一下笔记:
代理主要包括代理对象和被代理对象,比如在以下例子中,Hello是被代理对象,而HelloProxy是代理对象,他们同实现接口IHello,代码如下:
IHello接口代码:
package com.hollyinfo.springdemo;
public interface IHello {
public void hello(String name);
}
Hello类代码:
package com.hollyinfo.springdemo;
public class Hello implements IHello{
public void hello(String name){
System.out.println("Hello, "+name);
}
}
HelloProxy类代码:
package com.hollyinfo.springdemo;
import java.util.logging.Level;
import java.util.logging.Logger;
public class HelloProxy implements IHello {
private Logger logger = Logger.getLogger(this.getClass().getName());
private IHello helloObject;
public HelloProxy(IHello helloObject){
this.helloObject = helloObject;
}
public void hello(String name){
log("hello mehod starts...");
helloObject.hello(name);
log("hello method ends....");
}
private void log(String msg){
logger.log(Level.INFO,msg);
}
}
在这里为了更好的说明问题,我提供了一个main方法的类发下:
package com.hollyinfo.springdemo;
public class ProxyDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HelloProxy proxy = new HelloProxy(new Hello());
proxy.hello("justin");
}
}
从main方法中, 我们可以很清楚的看到HelloProxy将代理真正的Hello来执行hello()方法.使用这种代理方法,我们可以很把业务处理放在Hello类的Hello方法中,而在HelloProxy可以放一些与业务无关事情.