Spring的双生武魂之AOP

AOP

Spring的灵魂是什么?AOP和IOC!

AOP全称(Aspect-Oriented Programming),面向切面编程,是一种新的方法论, 是对传统OOP(Object-Oriented Programming, 面向对象编程) 的补充。

面向对象通俗来说就是面对类吧,那么为什么AOP面向的是什么?什么是切面?

如上图所示,以整个核心业务逻辑的地方横切过去一分为二

这样一来我们就可以把验证和日志封装到一起,只关注于最核心的加减乘除的业务逻辑。

是不是很抽象?上例子

简单示例

接口Operation

//纳入IOC容器管理
@Component
public interface Operation {
    public double oper(double num1,double num2);
}

加法实现类

//纳入IOC容器管理
@Component
public class Add implements Operation{

    public double oper(double num1, double num2) {
        double res = num1+num2;
        System.out.println("正在计算...");
        return res;
    }
}

切面类

@Component
//表示这个一个切面类
@Aspect
public class OperationAspect {
    //@Befor表示在执行核心逻辑之前的方法,记得切入点表达式
    @Before("execution(* Add.oper(..))")
    public void before(){
        System.out.println("记得检查是否是数字哦");
    }

    //@AfterReturning表示在返回结果后执行的方法
    @AfterReturning("execution(* Add.oper(..))")
    public void after(){
        System.out.println("计算结束");
    }

}

这个切面类就可以理解成将刚刚的验证参数、前置日志、后置日志封装在一起,提高了代码的复用性,不用每次执行加减时都需要验证或者日志。

测试:

public class TestAdd {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        Operation add = (Operation) ctx.getBean("add");
        System.out.println(add.oper(2,5));

    }
}

 为什么7.0在最后而不是“计算结束”在最后?

因为其实打印7.0这个语句是在所有方法之后了,看之前写在Add实现类中的打印“正在计算中”就知道,“计算结束”这个方法确实是在执行加法并返回结果之后执行了。

如果还是有点懵,建议去看下设计模式中的代理模式

不嫌弃的话可以看看本人的拙作-----羊村往事与代理模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值