希望实现;
一:在程序执行期间追踪正在发生的活动
二:希望计算器值处理整数的计算;
要实现以上要求:我们可以在调用方法的前后对正在发生的活动进行追踪,
代码:(1)运算的接口
package com.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);
}
(2)运算的具体实现类
public class ArithmeticCalculatorImpl implements ArithmeticCalculator {
@Override
public int add(int i, int j) {
int result = i + j;
return result;
}
@Override
public int sub(int i, int j) {
int result = i - j;
return result;
}
@Override
public int mul(int i, int j) {
int result = i * j;
return result;
}
@Override
public int div(int i, int j) {
int result = i / j;
return result;
}
}
(3)在调用运算方法前后对正在发生的行为追踪
public class ArithmeticCalculatorLoggingImpl implements ArithmeticCalculator {
@Override
public int add(int i, int j) {
System.out.println("The method add begins with [" + i + "," + j + "]");
int result = i + j;
System.out.println("The method add ends with " + result);
return result;
}
@Override
public int sub(int i, int j) {
System.out.println("The method sub begins with [" + i + "," + j + "]");
int result = i - j;
System.out.println("The method sub ends with " + result);
return result;
}
@Override
public int mul(int i, int j) {
System.out.println("The method mul begins with [" + i + "," + j + "]");
int result = i * j;
System.out.println("The method mul ends with " + result);
return result;
}
@Override
public int div(int i, int j) {
System.out.println("The method div begins with [" + i + "," + j + "]");
int result = i / j;
System.out.println("The method div ends with " + result);
return result;
}
}
在调用每个方法前后,把正在发生的活动进行追踪,但是同时带来了一些问题:
(1)原有的业务方法急剧膨胀. 每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点. 程序不仅要关注运算方法的实现,还要追踪正在发生的行为。
(2)如果日志需求发生变化, 必须修改所有模块.如果需求发生变化,我们每个运算模块的追踪模块都需要改变。
解决这个问题可以使用动态代理。