Spring点点滴滴之静态代理

来源:互联网 发布:淘宝怎么才能没有同款 编辑:程序博客网 时间:2024/06/05 07:05

最近学习了静态代理,首先举个例子,就是租房子的例子。在这里有房东,中介,和我(租房子的)。这里房东将房子委托给中介,中介带这我去看房子,房子满意房东将房子租给我,我把中介费给中介。这就是一个静态代理的过程。中介代理了租房子的过程,而且在这个过程中加入了自己的一些业务(带人看房子,收中介费)。
简单的用例图就是这样的
这里写图片描述下面就是一些简单的代码:

public interface userService {    public void add();    public void delete();    public void update();    public void search();}

这个就是一个公共的借口。

public class userServiceImpl implements userService{    @Override    public void add() {        // TODO Auto-generated method stub        System.out.println("添加用户");    }    @Override    public void delete() {        // TODO Auto-generated method stub        System.out.println("删除用户");    }    @Override    public void update() {        // TODO Auto-generated method stub        System.out.println("更新用户");    }    @Override    public void search() {        // TODO Auto-generated method stub        System.out.println("搜索用户");    }}

这个类实现了userService借口。
但是我想调用这个类输出的时候调用每个方法都要输出日志,如果在方法中直接加上像这样

public void logs(String userName)    {        System.out.println("执行日志"+userName);    }

在类的最后加上这个方法,之后在每个add这样的方法中调用logs这个方法,这样是很麻烦的。这时我么就用到了静态代理。

public class userServiceProxy implements userService{    private userService users;    @Override    public void add() {        // TODO Auto-generated method stub        logs("add");        users.add();    }    @Override    public void delete() {        // TODO Auto-generated method stub        logs("delete");        users.delete();    }    @Override    public void update() {        // TODO Auto-generated method stub        logs("update");        users.update();    }    @Override    public void search() {        // TODO Auto-generated method stub        logs("search");        users.search();    }    public void logs(String userName)    {        System.out.println("执行日志"+userName);    }}

这样userServiceImpl只要专注业务的实现就行了,其他的一些公用方法放在代理类中实现。、
使用静态代理的优点:
1.是真实角色处理业务更加纯粹(真实角色就是userServiceImpl),不再去关注一些公共的事情,公共的业务有代理类来完成————–实现业务的分工。
2公共业务发生扩展时变得更加集中和方便。
缺点:
1类变多了–多了一个代理类,工作量变大了,工作效率变低了。

0 0