spring aop 拦截引入jar_Spring框架源码阅读:Spring AOP

概述

Spring aop通过动态代理的方式实现,在使用spring-aop时,工程中会引入一个非spring的jar包aopalliance包,spring5中将aopalliance包中的class打进了spring-aop包中(为了减少依赖?),先看看aopalliance包中的内容:

f23b1d2b585744ee681107c4f65fee61.png

Aopalliance包非常简单,只包括aop相关的几个接口,可将其中的接口分为两类:

· 实体域:AOP所操作的核心实体

实体域是AOP中的核心概念,核心接口是Advice,其中MethodInterceptor和ConstructorInterceptor是Advice的子接口

· 会话域:AOP运行时的上下文相关数据

这类对象中最主要的接口是Joinpoint,Invocation以及MethodInvocation和ConstructorInvocation接口都是Joinpoint的子接口

Spring-AOP是aopalliance的实现,并对aopalliance做了加强,增加了另外的实体——PointCut,PointCut表示切入点,即在哪些类的哪些方法上使用Advice

Spring AOP的设计

Spring AOP提供了多种使用方式,常用的有注释和XML,但注解和XML是非常简单易用的上层API,我们先看一下Spring AOP的更底层的API PointcutAdvisor接口,写一个PointcutAdvisor的实现类:

75751c30b69250cdfc9db2762d42a9af.png

这里省略了getter/setter。可以看到,需要实现三个方法,先实现getPointcut方法,它需要返回一个Pointcut接口的对象,我们这里返回单例对象即可,本例简单起见,不管是否是单例,能说明问题即可,Pointcut接口中有两个方法&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring中,使用AOP可以通过以下几个步骤实现: 1. 导入相关依赖:在项目中添加Spring AOP相关的jar包,包括spring-aop和aspectjweaver。 2. 定义切面类:通过编写切面类来定义切面,切面类需要使用@Aspect注解进行标注,同时需要定义切入点(Pointcut)和通知(Advice)。 3. 定义切入点:切入点定义了哪些方法需要被拦截,可以使用@Pointcut注解进行定义。 4. 编写通知:通知是拦截到切入点后需要执行的代码,Spring AOP支持5种不同类型的通知,包括@Before、@After、@AfterReturning、@AfterThrowing和@Around。 5. 配置AOP:在Spring配置文件(如applicationContext.xml)中配置AOP,需要使用<aop:aspectj-autoproxy>标签来启用自动代理,同时需要将切面类和其他Bean进行配置。 下面是一个简单的示例代码,演示了如何在Spring中使用AOP: ```java @Aspect public class LoggingAspect { @Pointcut("execution(* com.example.service.*.*(..))") private void serviceLayer() {} @Before("serviceLayer()") public void logBefore(JoinPoint joinPoint) { System.out.println("Before " + joinPoint.getSignature().getName()); } @AfterReturning(pointcut = "serviceLayer()", returning = "result") public void logAfterReturning(JoinPoint joinPoint, Object result) { System.out.println("After " + joinPoint.getSignature().getName() + ", Result: " + result); } } ``` 在上面的代码中,我们定义了一个LoggingAspect切面类,使用@Aspect注解进行标注。我们定义了一个切入点serviceLayer(),表示所有com.example.service包下的方法都会被拦截。我们使用@Before和@AfterReturning注解来定义前置通知和返回通知,分别在方法执行前和执行后打印日志。 在Spring配置文件中,我们需要添加以下配置: ```xml <aop:aspectj-autoproxy /> <bean id="loggingAspect" class="com.example.LoggingAspect" /> <bean id="userService" class="com.example.UserService" /> ``` 这里我们启用了自动代理,同时配置了LoggingAspect和UserService两个Bean。现在,当我们调用UserService中的方法时,LoggingAspect中定义的通知就会被自动触发。 总之,使用Spring AOP可以非常方便地实现切面编程,提高代码的可重用性、可维护性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值