【Spring】基于注解实现aop

基于注解的AOP开发

1.快速开发步骤:

  1. 创建目标接口和目标类(内部有切点)

TargetInterface、Target

  1. 创建切面类(内部有增强方法)

MyAspect—(before、afterReturning…)

  1. 将目标类和切面类的对象创建权交给spring

加注解@Component(“name”)

切面类声明@Aspect

  1. 在切面类中使用注解配置织入关系

@Before(“execution(方法地址)”)

@Before("execution(* com.it.anno.Target.*(..))")
    public void before(){
        System.out.println("前置增强.........");
    }
  1. 在配置文件中开启组件扫描和AOP的自动代理

applicationContext_anno.xml

<!--开启注解扫描-->
    <context:component-scan base-package="com.it.anno"></context:component-scan>

    <!--开启aop自动代理-->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
  1. 测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext_anno.xml")
public class AnnoTest {
    @Autowired
    private TargetInterface target;

    @Test
    public void test1(){
        target.save();
    }
}

2.切点表达式抽取(封装)

  • 法一:
@Component("myAspect")
@Aspect
public class MyAspect {

    @Before("MyAspect.myPoint()")
    public void before(){
        System.out.println("前置增强.........");
    }

@AfterReturning("myPoincut()")
    public void afterReturning(){
        System.out.println("后置增强.........");
    }
    
    @Pointcut("execution(* com.it.anno.Target.*(..))")
    public void  myPoincut(){}

}
  • 法二:

新建一个Poincut类,使用@Before等注解直接@Before(“Poincut.myPoincut()”)引用方法就行


public class Poincut {
    @Pointcut("execution(* com.it.anno.Target.*(..))")
    public void myPoincut(){

    }
}

3.知识要点

  • 注解aop开发步骤

    1. 使用@Aspect标注切面类
    2. 使用@通知注解标注通知方法
    3. 在配置文件中配置aop自动代理aop:aspectj-autoproxy/
  • 通知注解类型

名称标签说明
前置通知@Before指定增强的方法在切入点方法之前执行
后置通知@AfterReturning指定增强的方法在切入点方法之后执行
环绕通知@Around指定增强的方法在切入点方法之前和之后都执行
异常抛出通知@AfterThrowing指定增强的方法在出现异常的时候执行
最终通知@After无论增强方法执行是否有异常都会执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值