如何自己实现 Spring AOP?

作者:微信小助手

发布时间: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(); }}

看一看咖啡的成分,对的,确实加上了糖!