Spring 面向切面编程
AOP 是 Spring 框架除了 IOC 之外的另一个核心概念。
AOP:Aspect Oriented Programming,意为面向切面编程。这是一个新的概念,但是我们知道 Java 是面向对象编程(OOP:Object Oriented Programming)的,指将所有的一切都看作对象,通过对象与对象之间相互作用来解决问题。AOP 是对 OOP 的一个补充,是在另外一个维度抽象出来的对象,具体是指程序在运行时,动态地将非业务代码切入业务代码中,从而实现代码的解耦合,将非业务代码抽象成一个对象,对该对象进行编程,这就是面向切面编程。
AOP 的优点:
- 降低模块之间的耦合度;
- 提高了代码的可维护性;
- 提高了代码的复用性;
- 集中分开管理非业务代码和业务代码,逻辑更加清晰;
- 业务代码更加简洁纯粹,没有其他代码的影响;
1. 面向切面编程思想
介绍概念过于抽象和空泛,不易于理解,下面我们通过一个实例来说明,慢慢引出 AOP 的动态代理机制以及实际开发中如何使用面向切面编程。
1、创建一个计算器接口 Cal,定义四个方法:加、减、乘、除;
public interface Cal {
public int add(int num1,int num2);
public int sub(int num1,int num2);
public int mul(int num1,int num2);
public int div(int num1,int num2);
}
2、创建接口实现类 CalImpl,并且实现上面定义的四个方法;
public class CalImpl implements Cal{
public int add(int num1, int num2) {
int result = num1 + num2;
return result;
}
public int sub(int num1, int num2) {
int result = num1 - num2;
return result;
}
public int mul(int num1, int num2) {
int result = num1 * num2;
return result;
}
public int div(int num1, int num2) {
int result = num1 / num2;
return result;
}
}
3、在测试方法中创建 CalImpl 对象,调用方法;
public class Test3 {
public static void main(String[] args) {
Cal cal = new CalImpl();
cal.add(12,4); //16
cal.sub(12,4); //8
cal.mul(12,4); //48
cal.div(12,4); //3
}
}
以上这段代码很简单,现在想要添加功能:在每一个方法执行的同时,打印日志信息,即该方法的参数列表和该方法的计算结果。
这个需求很简单,只需要在每一个方法体中,运算执行之前打印参数列表,运行之后打印计算结果即可,因此,对代码做出如下修改:
public class CalImpl implements Cal{
public int add(int num1, int num2) {
System.out.println("add方法的参数是["+num1+","+num2+"]" );
int result = num1 + num2;
System.out.println("add方法的结果是"+result);
return result;
}
public int