最近学javaWeb的时候学到了spring的一个静态代理的机制。
通过代理对象来操作目标对象,可以做到在不修改目标对象的功能前提下,对目标对象功能扩展。
要求是代理类和目标类都得实现相同的接口
public class UserDao implements IUserDao {
@Override
public void save() {
System.out.println("-------已经保存数据-------");
}
}
public interface IUserDao {
public void save();
}
public class UserDaoProxy implements IUserDao{
//接受保存目标对象
private IUserDao target;
public UserDaoProxy(IUserDao target){
this.target = target;
}
@Test
@Override
public void save() {
System.out.println("开始事务");
target.save(); //用接口应用实现类的对象
System.out.println("提交事务");
}
}
public class App {
public static void main(String args[]){
//用接口IUserDao声明对象 target,引用UserDao()对象
IUserDao target = new UserDao();
//用接口IUserDao声明对象 proxy,引用静态代理对象
IUserDao proxy = new UserDaoProxy(target); //初始化代理类对象时传入代理对象target
proxy.save();
}
}
用接口去引用其实现类的实例,可以实现接口的多态。