标签:事务 面向切面 很多 关系 核心技术 了解 pre 静态代理 应用
面向切面编程 事务 很多框架地层用到 可以重构重复代码
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的多态嘛 我是这么理解的,小伙伴你们有何见解嘛
如果业务量比较大 有很多类需要去代理 不利于扩展的 这样
静态代理需要生成代理对象!!! 如果再添加个方法,则会这样:、
这样很冗余~
标签:事务 面向切面 很多 关系 核心技术 了解 pre 静态代理 应用
原文地址:https://www.cnblogs.com/toov5/p/9863793.html