Spring系列__04AOP
2019-09-16 23:17
1501 查看
AOP简介
今天来介绍一下AOP。AOP,中文常被翻译为“面向切面编程”,其作为OOP的扩展,其思想除了在Spring中得到了应用,也是不错的设计方法。通常情况下,一个软件系统,除了正常的业务逻辑代码,往往还有一些功能性的代码,比如:记录日志、数据校验等等。最原始的办法就是直接在你的业务逻辑代码中编写这些功能性代码,但是,这样除了当时开发的时候比较方便以外;代码的阅读性、可维护性都会大大降低。而且,当你需要频繁使用一个功能的时候(比如记录日志),你还需要重复编写。而使用AOP的好处,简单来说就是,它能把这种重复性的功能代码抽离出来,在需要的时候,通过动态代理技术,在不修改源代码的情况下提供增强性功能。
优势:
- 减少重复代码
- 提高开发效率
- 代码更加整洁,提高了可维护性
说了这么多,简单演示一下,我们假定有一个计算器对象,并能实现基本的加减乘除运算;同时,我们希望对相应的操作进行日志的记录。
public interface ArithmeticCalculator { int add(int i, int j); int sub(int i, int j); int mul(int i, int j); int div(int i, int j); }
在这里,我们定义了一个接口ArithmeticCalculator 来完成加减乘除运算,并将其具体实现交由其实现类完成。
public class ArithmeticCalculatorImpl implements ArithmeticCalculator { @Override public int add(int i, int j) { System.out.println(i + "和 " + j + "开始加法运算"); int reusult = i + j; System.out.println("加法运算结果是: " + reusult); return reusult; } @Override public int sub(int i, int j) { System.out.println(i + "和 " + j + "开始减法运算"); int reusult = i - j; System.out.println("减法运算结果是: " + reusult); return reusult; } @Override public int mul(int i, int j) { System.out.println(i + "和 " + j + "开始乘法运算"); int reusult = i * j; System.out.println("乘法运算结果是: " + reusult); return reusult; } @Override public int div(int i, int j) { if (j == 0) { throw new ArithmeticException("除数" + j + "不能为0"); } System.out.println(i + "和 " + j + "开始除法运算"); int reusult = i / j; System.out.println("除法运算结果是: " + reusult); return reusult; } }
在这里,我们看见了很恶心的代码:大量重复性的记录日志的代码,而且,当你更改的时候,你发现并不方便。后续我们会对这个代码进行改写。
AOP的实现方式
AOP通过动态代理的来实现。
在这里先简单介绍一下动态代理:使用一个代理将对象包装起来, 然后用该代理对象取代原始对象.。任何对原始对象的调用都要通过代理. 代理对象决定是否以及何时将方法调用转到原始对象上。其调用过程如下图所示:
相关文章推荐
- Spring基础系列-AOP源码分析
- Spring系列之AOP实现的两种方式
- Spring代码实例系列-04:autowire自动装配合集
- Spring代码实例系列-07:Spring AOP面向切面,模拟实现事物控制
- spring 5.x 系列第3篇 —— spring AOP (xml配置方式)
- springboot系列之AOP
- Spring系列之AOP
- spring系列(三)——springAOP原理探究(CGLIB代理机制)
- spring 5.x 系列第4篇 —— spring AOP (代码配置方式)
- SpringMVC经典系列-04基于Spring3.1注解的方式进行项目开发---【LinusZhu】
- Spring系列【04】应用@Autowired注解实现Bean的注入
- Spring笔记04_AOP注解开发_模板_事务
- Spring全家桶系列–SpringBoot之AOP详解
- spring学习系列 --- AOP学习
- Spring系列之-Spring AOP设计原理(一)
- Spring系列之 (七):AOP
- Spring系列之 (十六):利用Spring AOP和自定义注解实现日志功能
- 【SpringBoot系列3】SpringBoot使用事务和AOP
- SpringMVC干货系列:从零搭建SpringMVC+mybatis(四):Spring两大核心之AOP学习
- Spring系列之 (十):AOP实现方式(二):使用AspectJ的注解方式