spring的AOP简单例子

本文通过一个详细的例子展示了Spring中的AOP如何用于解决横切关注点问题。首先定义了一个Calculator接口和其实现类,接着创建了一个LoggingAspect切面类用于记录方法调用的日志。然后在Spring配置中定义了切点和通知(before和after),最后展示了如何在实际应用中使用AOP进行方法调用并触发日志记录。
摘要由CSDN通过智能技术生成

AOP(Apsect  Oriented  Programming),即面向切面编程,是一种开发思想,其主要是用来解决程序中的横切关注点问题。

在  Spring  中,AOP  主要使用的是基于代理的  AOP  实现,它是使用  JDK  动态代理或  CGLIB  动态代理来代理目标对象,然后基于代理对象来实现增强的功能。

下面是一个使用  Spring  AOP  的详细例子:

1.  定义一个接口及其实现类

  • public interface Calculator {
  • public int add(int a, int b);
  • public int sub(int a, int b);
  • }
  • public class CalculatorImpl implements Calculator {
  • public int add(int a, int b) {
  • return a + b;
  • }
  • public int sub(int a, int b) {
  • return a - b;
  • }
  • }


2.  定义一个切面类

  • public class LoggingAspect {
  • public void before(JoinPoint joinPoint){
  • System.out.println("before "+joinPoint.getSignature().getName()+"..("+ Arrays.toString(joinPoint.getArgs())+")");
  • }
  • public void after(JoinPoint joinPoint, Object result){
  • System.out.println("after "+joinPoint.getSignature().getName()+"..("+ Arrays.toString(joinPoint.getArgs())+") => "+result);
  • }
  • }


3.  配置  AOP

  • <!-- 配置切面 -->
  • <bean id="loggingAspect" class="com.example.aop.LoggingAspect" />
  • <!-- 定义一个 Pointcut,匹配 Calculator 接口的所有方法 -->
  • <aop:pointcut id="calculatorMethods" expression="execution(* com.example.aop.Calculator.*(..))" />
  • <!-- 配置 Advice -->
  • <aop:config>
  • <aop:aspect ref="loggingAspect">
  • <aop:before method="before" pointcut-ref="calculatorMethods" />
  • <aop:after-returning method="after" returning="result" pointcut-ref="calculatorMethods" />
  • </aop:aspect>
  • </aop:config>


4.  使用  AOP

  • // 获取 Spring 上下文
  • ApplicationContext context = new ClassPathXmlApplicationContext("classpath:aop.xml");
  • // 从 Spring 上下文中获取 Calculator 的代理对象
  • Calculator calculator = (Calculator)context.getBean("calculator");
  • // 调用代理对象的方法
  • int result1 = calculator.add(1, 2); // 输出:before add..([1, 2]) after add..([1, 2]) => 3
  • int result2 = calculator.sub(3, 1); // 输出:before sub..([3, 1]) after sub..([3, 1]) => 2


以上就是一个  Spring  AOP  的例子,主要涉及到三个部分:目标对象、切面类和配置  AOP。在  AOP  中,我们可以使用不同类型的  Advice(例如:before、after、around  等)来实现不同的操作,在这个例子中,我们使用了  before  和  after  Advice  来实现日志记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值