Spring的AOP----从入门到精通(2)
本篇文章,结合上一个代码实例,来使用感受一下Spring的AOP真正的作用。
作为一个入门的小demo,这里我们使用的所有方法都不涉及传参问题。步骤可以分为如下: ① 将目标类和切面类(封装了通知方法的类)加入到IOC容器中。 ② 告诉Spring到底哪个是切面类。使用@Aspect注解。 ③ 告诉Spring,切面类里面的每一个方法,都是何时何地运行。 (1)将目标类和切面类加入到IOC容器中。
/* 首先创建一个接口,这也是jdk底层动态代理传入的接口值照应 */ public interface Calculator { void add(); }
package com.cn.impl; /* 实现接口 使用@Service注解,将这个类加入到容器中 */ import com.cn.service.Calculator; import org.springframework.stereotype.Service; @Service public class Calculatorimpl implements Calculator { public void add(){ System.out.println("正在使用add方法"); } }
package com.cn.util; /* 切面类,使用@Commponent注解,将这个类加入到容器中 */ import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component; @Component @Aspect public class Logutils { @Before("execution(public void com.cn.service.Calculator.add())") public void beforerLog(){ System.out.println("[前置通知]使用add方法完毕"); } @After("execution(public void com.cn.service.Calculator.add())") public void afterLog(){ System.out.println("[后置通知]使用add方法完毕"); } @AfterReturning("execution(public void com.cn.service.Calculator.add())") public void returnLog(){ System.out.println("[正常返回通知]使用add方法完毕"); } @AfterThrowing("execution(public void com.cn.service.Calculator.add())") public void throwLog(){ System.out.println("[异常通知]使用add方法完毕"); } }
(2) 告诉Spring到底哪个是切面类。使用@Aspect注解。 如上代码所示,在切面类中使用了@Aspect注解 (3)告诉Spring,切面类里面的每一个方法,都是何时何地运行。 分别使用了@Before、@After、@AfterReturning、@AfterThrowing,四个注解对应不同的时刻,使用表达式,绑定对应方法。 这时候在xml文件中开启ioc注解扫描和aop的切面代理即可
<!--开启IOC注解扫描--> <context:component-scan base-package="com.cn"></context:component-scan> <!--启动aop切面代理--> <aop:aspectj-autoproxy/>
运行结果如下
下一篇:
Nacos服务注册中心对比提升