现在的位置: 首页 > 综合 > 正文

java静态代理

2013年08月27日 ⁄ 综合 ⁄ 共 1344字 ⁄ 字号 评论关闭

代理就是讲 原先不相关的代码, 在运行时 组合到一起去运行, 这样提高程序的维护性,并让 业务代码 和 服务器代码 完全分离,以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

 

抱歉!评论已关闭.