行业知识
Spring AOP基于注解方式实现
2026-11-14 10:35:34
来源:互联网转载
1. 场景介绍
���前假设我们有一个计算器类,并要为其中的方法添加日志功能。
()计算器类如代码所示:
public interface Calculator { int add(int i, int j); int sub(int i, int j); int mul(int i, int j); int p(int i, int j); } public class CalculatorPureImpl implements Calculator { @Override public int add(int i, int j) { int result = i + j; return result; } @Override public int sub(int i, int j) { int result = i - j; return result; } @Override public int mul(int i, int j) { int result = i * j; return result; } @Override public int p(int i, int j) { int result = i / j; return result; }} 可以看到,计算器类的实现类目前只有最核心的功能方法。
()下面,我们就使用spring aop为其添加日志功能。
2. 实现
步骤如下所示:
2.1 加入依赖
org.springframework spring-aop 6.0.6 org.springframework spring-aspects 6.0.6
2.2 声明切面类
import org.aspectj.lang.annotation.*;import org.springframework.stereotype.Component;// @Aspect表示这个类是一个切面类@Aspect// @Component注解保证这个切面类能够放入IOC容器@Componentpublic class LogAspect { // @Before注解:声明当前方法是前置通知方法 // value属性:指定切入点表达式,由切入点表达式控制当前通知方法要作用在哪一个目标方法上 @Before(value = "execution(public int org.kkk.proxy.CalculatorPureImpl.add(int,int))") public void printLogBeforeCore() { System.out.println("[AOP前置通知] 方法开始了"); } @AfterReturning(value = "execution(public int org.kkk.proxy.CalculatorPureImpl.add(int,int))") public void printLogAfterSuccess() { System.out.println("[AOP返回通知] 方法成功返回了"); } @AfterThrowing(value = "execution(public int org.kkk.proxy.CalculatorPureImpl.add(int,int))") public void printLogAfterException() { System.out.println("[AOP异常通知] 方法抛异常了"); } @After(value = "execution(public int org.kkk.proxy.CalculatorPureImpl.add(int,int))") public void printLogFinallyEnd() { System.out.println("[AOP后置通知] 方法最终结束了"); } } 2.3 开启aspectj注解支持
@Configuration@ComponentScan(basePackages = "org.kkk")//作用等于 配置类上开启 Aspectj注解支持!@EnableAspectJAutoProxypublic class MyConfig {} 2.4 测试
@SpringJUnitConfig(value = {MyConfig.class})public class AopTest { @Autowired private Calculator calculator; @Test public void testCalculator(){ calculator.add(1,1); }}
上一篇:蘑菇服务器怎么白嫖?