作者:微信小助手
发布时间:2022-01-11T10:44:35
Spring
来说,如何自己实现
Spring AOP
?
就喜欢这样的题,能把那些天天写增删改查从来不思考的人给
PK
下去,今天就和大家一切学习代理模式与
Spring AOP
。
代理,即替代之意,可替代所有功能,即和原类实现相同的规范。
代理模式和装饰器模式很像,之前的装饰器讲的不是很好,这里换个例子再讲一遍。
宁静的午后,来到咖啡馆,想喝一杯咖啡。
给你一个咖啡接口:
public interface Coffee {
/**
* 打印当前咖啡的原材料,即咖啡里有什么
*/
void printMaterial();
}
一个默认的苦咖啡的实现:
public class BitterCoffee implements Coffee {
@Override
public void printMaterial() {
System.out.println("咖啡");
}
}
默认的点餐逻辑:
public class Main {
public static void main(String[] args) {
Coffee coffee = new BitterCoffee();
coffee.printMaterial();
}
}
点一杯咖啡。
优雅的服务生把咖啡端了上来,抿了一口,有些苦。想加点糖,对服务生说:“您好,请为我的咖啡加些糖”。
/**
* 糖装饰器,用来给咖啡加糖
*/
public class SugarDecorator implements Coffee {
/**
* 持有的咖啡对象
*/
private final Coffee coffee;
public SugarDecorator(Coffee coffee) {
this.coffee = coffee;
}
@Override
public void printMaterial() {
System.out.println("糖");
this.coffee.printMaterial();
}
}
然后服务生就拿走了我的咖啡,去使用SugarDecorator
为咖啡加糖,最后把加好糖的咖啡给我。
public class Main {
public static void main(String[] args) {
Coffee coffee = new BitterCoffee();
coffee = new SugarDecorator(coffee);
coffee.printMaterial();
}
}
看一看咖啡的成分,对的,确实加上了糖!