本文主要通过一些实例,一步步逐渐完善一个AOP的例子:
1.简单的AOP日志实现-某方法之前的前后记录日志;
2.简单的AOP日志实现-需要记录方法的运行时间;
3.简单的AOP日志实现-增加检查订单功能;
以上这些例子的AOP相关的配置均使用XML配置实现,bean的配置均使用Java代码实现,稍后会给出AOP注解配置的实现方案。
1.某方法之前的前后记录日志
(1)entity
蛋糕类:仅仅有name属性和get、set方法。
package spring.ch3.topic1;
/**
* Created by louyuting on 17/1/20.
* 注入属性,记得属性必须要写setter方法 不然就会抛出异常,注入失败.
*/
public class Cake {
private String name = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
烤炉类:
package spring.ch3.topic1;
/**
* Created by louyuting on 17/1/21.
*/
public class Oven {
private String name = "";
@Override
public String toString() {
return name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
厨师类:厨师类里面有使用的烤炉类以及做的蛋糕类。厨师类里面只加了一个额外方法,就是制作一个蛋糕的方法。
package spring.ch3.topic1;
/**
* Created by louyuting on 17/1/20.
*/
public class Chief {
private static int index = 0;
public static int getIndex() {
return index;
}
public static void setIndex(int index) {
Chief.index = index;
}
private Cake cake = null;
private Oven oven = null;
private final int id = index++;
private String name = "";
public Cake getCake() {
return cake;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public Oven getOven() {
return oven;
}
public void setCake(Cake cake) {
this.cake = cake;
}
public void setName(String name) {
this.name = name;
}
public void setOven(Oven oven) {
this.oven = oven;
}
public void makeOneCake() {
System.out.println(getName() + " make " + getCake().getName());
}
}
日志类:
package spring.ch3.topic1;
/**
* Created by louyuting on 17/1/24.
*/
public class Log {
public void washOven() {
System.out.println(