代码混乱:越来越多的非业务需求(日志和验证等)加入后, 原有的业务方法急剧膨胀. 每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点. 代码分散: 以日志需求为例, 只是为了满足这个单一需求, 就不得不在多个模块(方法)里多次重复相同的日志代码. 如果日志需求发生变化, 必须修改所有模块.
效果图
ArithmeticCalculator.java
package com.benny.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);
}
ArithmeticCalculatorImpl.java
package com.benny.spring.aop;
public class ArithmeticCalculatorImpl implements ArithmeticCalculator {
@Override
public int add(int i, int j) {
System.out.println("this methed add begins with[" + i +","+j+"]");
int result = i + j;
System.out.println("this methed add end with[" +result+"]");
return result;
}
@Override
public int sub(int i, int j) {
System.out.println("this methed sub begins with[" + i +","+j+"]");
int result = i - j;
System.out.println("this methed sub end with[" +result+"]");
return result;
}
@Override
public int mul(int i, int j) {
System.out.println("this methed mul begins with[" + i +","+j+"]");
int result = i * j;
System.out.println("this methed mul end with[" +result+"]");
return result;
}
@Override
public int div(int i, int j) {
System.out.println("this methed div begins with[" + i +","+j+"]");
int result = i / j;
System.out.println("this methed div end with[" +result+"]");
return result;
}
}
Main.java
package com.benny.spring.aop;
public class Main {
public static void main(String[] args) {
ArithmeticCalculator arithmeticCalculator = null;
arithmeticCalculator = new ArithmeticCalculatorImpl();
int add = arithmeticCalculator.add(3, 1);
System.out.println(add);
int sub = arithmeticCalculator.sub(3, 1);
System.out.println(sub);
int mul = arithmeticCalculator.mul(3, 1);
System.out.println(mul);
int div = arithmeticCalculator.div(3, 1);
System.out.println(div);
}
}