代理就是讲 原先不相关的代码, 在运行时 组合到一起去运行, 这样提高程序的维护性,并让 业务代码 和 服务器代码 完全分离,以Person为例. --下篇在写动态代理, AOP..
Person 接口:
public
interface
IPerson {
public void sleep();
public void walk();
}
Person 实现类:
public
class PersonImp implements
IPerson{
public
void sleep() {
System.out
.println("sleep..."); //业务代码 ,比如 往数据库插入数据, 但不包括 事务
}
public
void walk() {
System.out
.println("walk..."); //业务代码
,比如 往数据库插入数据, 但不包括 事务
}
}
Person代理类, 实现IPerson接口:
public
class ProxyPerson implements
IPerson{
private
IPerson person;
public
void setPerson(IPerson person) {
this.person = person;
}
public
ProxyPerson(IPerson person) {
super
();
this.person = person;
}
public
void sleep() {
System.out
.println("befor sleep"); //服务代码, 比如事务的开启
person.sleep(); //调用 PersonImp 的 sleep方法
System.out
.println("after sleep"); //服务代码, 比如事务的提交,和回滚
}
public
void walk() {
System.out
.println("befor walk"); //服务代码, 比如事务的开启
person.walk(); //调用 PersonImp 的 walk方法
System.out
.println("after walk"); //服务代码, 比如事务的提交,和回滚
}
}
测试:
public
class StaticProxyTest {
public
static
void main(String[] args) {
IPerson person = new ProxyPerson(new PersonImp()); //由于ProxyPerson 和 PersonImp 都实现了IPerson接口,所以可以用IPerson接收,然后调用起方法
person.sleep(); // 实际上是调用的 ProxyPerson 里面的 sleep方法
person.walk(); // 实际上是调用的 ProxyPerson 里面的 sleep方法
}
}
效果:
befor sleep
sleep...
after sleep
befor walk
walk...
after walk