Spring 与 AOP(第一讲)
2020-08-02 本文已影响0人
辽A丶孙悟空
AOP 的引用
Step1:项目Spring_Aop_ Leadin1
先定义好接口与一个实现类,该实现类中除了要实现接口中的方法外,还要再写两个非
业务方法。非业务方法也称为交叉业务逻辑:
① doTransaction(): 用于事务处理。
② doLog(): 用于日志处理。
然后,再使接口方法调用它们。接口方法也称为主业务逻辑。
Step2:项目Spring_Aop_ Leadin2
此时提出一个问题:若有其它实现类同样也要调用这些事务、日志等处理方法怎么办?解决办法是,将这些日志、事务等方法包装到另外一个类中,让实现类继承这个类。
Step3:项目Spring_Aop_ Leadin3
以上的解决方案,也有一个弊端:若实现类还需要继承其它类,就不行了。因为 Java 不技术多继承。
当然,也可以有另-种解决方案:将这些交叉业务逻辑代码放到专门的工具类或处理类中,由主业务逻辑调用。
Step4:项目Spring_Aop_ Leadin4
以上的解决方案,还是存在弊端:交叉业务与主业务深度耦合在一起。当交叉业务逻辑较多时,在主业务代码中会出现大量的交叉业务逻辑代码调用语句,大大影响了主业务逻辑的可读性,降低了代码的可维护性,同时也增加了开发难度。
所以,可以采用动态代理方式。动态代理是 OCP 开发原则的一个重要体现:在不修改主业务逻辑的前提下,扩展和增强其功能。