代理模式
Posted toov5
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代理模式相关的知识,希望对你有一定的参考价值。
面向切面编程 事务 很多框架地层用到 可以重构重复代码
AOP 的地层的实现也是代理模式 了解事务需要了解代理模式 包装代理设计模式
什么是代理模式
通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用处理,或调用后处理。既(AOP微实现) ,AOP核心技术面向切面编程。
代理模式应用场景
SpringAOP、事物原理、日志打印、权限控制、远程调用、安全代理 可以隐蔽真实角色
代理的分类
静态代理(静态定义代理类)
动态代理(动态生成代理类)
Jdk自带动态代理
Cglib 、javaassist(字节码操作库)
静态代理
什么是静态代理
由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。
通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用之前或调用之后进行处理。既(AOP微实现),AOP核心技术面向切面编程
静态代理和动态代理 静态代理需要些代理类 动态代理不需要
废话不多说,上手写代码:
用静态代理,模式下事务原理
定义接口
package DaiLi; public interface IUserDao { public void add(); }
实现接口:
package DaiLi; public class IUserDaoImpl implements IUserDao { @Override public void add() { System.out.println("add方法调用"); } }
代理类也是根据接口去扩展的:
package DaiLi; public class UserDaoProxy implements IUserDao{ //通过构造函数 传入代理对象 private IUserDao iUserDao; public UserDaoProxy(IUserDao iUserDao) { this.iUserDao=iUserDao; } //在方法之前之后做拦截处理 @Override public void add() { System.out.println("开启事务"); iUserDao.add(); //通过代理 去掉用方法 System.out.println("提交事务"); } }
客户端使用:
package DaiLi; public class UserDaoProxy implements IUserDao{ //通过构造函数 传入代理对象 private IUserDao iUserDao; public UserDaoProxy(IUserDao iUserDao) { this.iUserDao=iUserDao; } //在方法之前之后做拦截处理 @Override public void add() { System.out.println("开启事务"); iUserDao.add(); //通过代理 去掉用方法 System.out.println("提交事务"); } }
运行结果:
其实就是接口 然后实现接口 Java的多态嘛 我是这么理解的,小伙伴你们有何见解嘛
如果业务量比较大 有很多类需要去代理 不利于扩展的 这样
静态代理需要生成代理对象!!! 如果再添加个方法,则会这样:、
这样很冗余~
以上是关于代理模式的主要内容,如果未能解决你的问题,请参考以下文章