【Spring】静态代理

来源:互联网 发布:淘宝捡漏 编辑:程序博客网 时间:2024/06/05 08:38

首先我们先来理解下什么叫代理模式?

代理模式:

代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式;即通过代理访问目标对象。 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作。(扩展目标对象的功能)。


代理模式的关键点:代理对象和目标对象

接下来我们就来讲讲静态代理:

优点:

1)代理对象要实现和目标对象一样的接口

2)可以做到不修改目标对象的前提下,对目标对象的功能进行扩展

缺点:

1)因为代理对象,需要与目标对象实现一样的接口。所以会有很多代理类,类太多。

2)一旦接口增加方法,目标对象与代理对象都要维护。

接下来 我们就来做个小例子来更深刻理解静态代理

首先建立一个接口IUserDao:

package cn.qblank.a_static;public interface IUserDao {/** * 保存方法 */void save();}

然后定义一个目标对象UserDao,实现这个接口

package cn.qblank.a_static;/** * 目标对象 * @author Administrator * */public class UserDao implements IUserDao{@Overridepublic void save() {System.out.println("保存数据!!!");}}

接下来再定义一个代理对象UserDaoProxy实现这个接口

package cn.qblank.a_static;/** * 静态代理对象 * @author Administrator * */public class UserDaoProxy implements IUserDao{//接收目标对象private IUserDao target;public UserDaoProxy(IUserDao target){this.target = target;}@Overridepublic void save() {System.out.println("开启事务");//执行目标方法target.save();System.out.println("提交事务");}}

这样我们就完成了简单的静态代理,接下来建立Test类来测试一下

package cn.qblank.a_static;public class Test {public static void main(String[] args) {//创建目标对象IUserDao target = new UserDao();//创建代理对象,将目标对象传入IUserDao proxy = new UserDaoProxy(target);proxy.save();}}

使用静态代理前运行结果:


使用静态代理后运行结果如下:



我们并没有修改目标对象,而是给它添加了一个代理类,然后对其功能实现了扩展。

满足了java开发中的开闭原则:

对于扩展是开放的,对于修改是关闭的