AOP配置(注解)

注解开发AOP制作步骤

  • 在XML格式基础上
    • 导入坐标(伴随spring-context坐标导入已经依赖导入完成)
    • 开启AOP注解支持
    • 配置切面@Aspect
    • 定义专用的切入点方法,并配置切入点@Pointcut
    • 为通知方法配置通知类型及对应切入点@Before

在applicationContext.xml里添加标签,开启aop注解支持
在这里插入图片描述
在AOPAdvice里添加注解
在这里插入图片描述
运行程序可见正常运行
在这里插入图片描述
修改AOPAdvice内容
在这里插入图片描述
运行可见结果
在这里插入图片描述
如果在AOPAdvice里添加@Component
在这里插入图片描述
则可删除applicationContext.xml里的选中行
在这里插入图片描述
然后在UserServiceImpl里添加@Service
在这里插入图片描述
在xml里添加扫描器
在这里插入图片描述
删除bean标签
在这里插入图片描述

这样运行后结果依然正确
在这里插入图片描述


注解开发AOP注意事项

  • 切入点最终体现为一个方法,无参无返回值,无实际方法体内容,但不是是抽象方法
  • 引用切入点时必须使用方法调用名称,方法后面的()不能省略
  • 切面类中定义的切入点只能在当前类中使用,如果想引用其他类中定义的切入点使用“类名.方法名()”引用
  • 可以在通知类型注解后添加参数,实现XML配置中的属性,例如after-returning后的returning属性

新建AOPPointcut.java
在这里插入图片描述
将AOPAdvice里的内容改成如图
在这里插入图片描述
可见正常运行
在这里插入图片描述


AOP注解详细

  • 名称:@Aspect
  • 类型:注解
  • 位置:类定义上方
  • 作用:设置当前类为切面类
  • 格式:
@Aspect
public class AopAdvice{
}
  • 说明:一个beans标签中可以配置多个aop:config标签

AOP注解详细

  • 名称:@Pointcut
  • 类型:注解
  • 位置:方法定义上方
  • 作用:使用当前方法名作为切入点引用名称
  • 格式:
@Pointcut("execution(* *(..))")
public void pt(){
}
  • 说明:被修饰的方法忽略其业务功能,格式设定为无参无返回值的方法,方法体内空实现(非抽象)

AOP注解详细

  • 名称:@Before
  • 类型:注解
  • 位置:方法定义上方
  • 作用:标注当前方法为前置通知
  • 格式:
@Before("pt()")
public void before(){
}
  • 特殊参数:

AOP注解详细

  • 名称:@After
  • 类型:注解
  • 位置:方法定义上方
  • 作用:标注当前方法为后置通知
  • 格式:
@After("pt()")
public void after(){
}
  • 特殊参数:

AOP注解详细

  • 名称:@AfterReturning
  • 类型:注解
  • 位置:方法定义上方
  • 作用:标注当前方法为返回后通知
  • 格式:
@AfterRetruning(value="pt()",returning="ret")
public void afterRetruning(Object ret){
}
  • 特殊参数:
    • returning:设定使用通知方法参数接收返回值的变量名

AOP注解详细

  • 名称:@AfterThrowing
  • 类型:注解
  • 位置:方法定义上方
  • 作用:标注当前方法为异常后通知
  • 格式:
@AfterThrowing(value="pt()",throwing="t")
public void afterthrowing(Throwable t){
}
  • 特殊参数:
    • throwing:设定使用通知方法参数接收原始方法中抛出的异常对象名

AOP注解详细

  • 名称:@Around
  • 类型:注解
  • 位置:方法定义上方
  • 作用:标注当前方法为环绕通知
  • 格式:
@Around("pt()")
public void around(ProceedingJoinPoint pjp) throws Throwable{
	Object ret = pjp.proceed();
    return ret;
}
  • 特殊参数:

@Aspect
@Component
@After
@AfterThrowing
@AfterReturning
@Before
@Pointcut


AOP注解开发通知执行顺序控制(了解)

  • AOP使用XML配置情况下,通知的执行顺序由配置顺序决定,在注释情况下由于不存在配置顺序的概念,参照通知所配置的方法名字符串对应的编码值顺序,可以简单理解为字母排序
    • 同一个通知类,相同通知类型以方法名排序为准
    • 不同通知类中,以类名排序为准
    • 使用@Order注解通过变更bean的加载顺序改变通知的加载顺序
  • 企业开发经验
    • 通知方法名由3部分组成,分别是前缀、顺序编码、功能描述
    • 前缀为固定字符串,例如baidu、thenema等,无实际意义
    • 顺序编码为6位以内的整数,通常3位即可,不足位补0
    • 功能描述为该方法对应的实际通知功能,例如exception、strLenCheck
    • 控制通知执行顺序使用顺序编码控制,使用时做一定空间预留
      • 003使用,006使用,预留001,002,004,005,007,008
      • 使用时从中段开始使用,方便后期做前置追加或后置追加
      • 最终顺序以运行顺序为准,以测试结果为准,不以设定规则为准

AOP注解通知执行顺序


AOP注解驱动

  • 名称:@EnableAspectJAtuoProxy
  • 类型:注解
  • 位置:Spring注解配置类定义上方
  • 作用:设置当前类开启AOP注解驱动支持,加载AOP注解
  • 格式:
@Configuration
@ComponentScan("com.thenema")
@EnableAspectJAutoProxy
public class SpringConfig{
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringAOP(面向切面编程)是通过注解配置的。AOP是一种用于将横切关注点(如日志记录、事务管理等)与主业务逻辑分离的技术。使用注解配置AOP可以更简洁、灵活地定义切面和通知。 要配置AOP,我们需要使用到Spring的几个注解。首先是使用@Aspect注解定义一个切面,该注解告诉Spring这是一个切面类。然后,我们可以在切面类内部定义多个通知方法通知方法使用@Before、@After、@Around等注解来指定它们在目标方法之前、之后或者环绕目标方法执行。 在通知方法内部,我们可以通过使用@Pointcut注解来定义切点表达式,切点表达式用于指定哪些方法需要被拦截,以何种方式进行拦截。通过@Pointcut定义的切点可以被多个通知方法共享。 除了切面和通知,我们还可以使用其他注解来指定通知的类型。例如,使用@Before注解表示在目标方法执行之前执行通知方法,使用@After注解表示在目标方法执行之后执行通知方法,使用@Around注解表示在目标方法执行之前和之后都执行通知方法配置AOP时,我们还需要使用@Bean注解来将切面类注册为Spring的一个bean。这样,Spring容器才能够自动识别它并将其应用于适当的目标方法。 总结一下,通过使用注解配置AOP,我们可以更方便地定义切面和通知,并将它们应用于目标方法SpringAOP注解提供了灵活的方式来实现横切关注点的分离,使得代码更具可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值