SpringAOP操作及其术语

AOP操作及术语

术语

  • 连接点:
    类内可以增强的方法叫连接点
  • 切入点
    实际被增强的方法被称为切入点
  • 通知(增强)
    实际增强的逻辑部分被称为通知
  • 切面
    把通知应用到切入点的过程称为通知

五种通知类型

//被增强类
@Component
public class User {
    public void add(){
//        System.out.println(1/0);
        System.out.println("add");
    }

    public static void main(String[] args) {
        ApplicationContext app=new ClassPathXmlApplicationContext("bean2.xml");
        User user = app.getBean("user", User.class);
        user.add();

    }
}

@Before 前置通知

@AfterReturning 后置通知

@After 后置通知

@Around 环绕通知 在方法前后执行

@AfterThrowing 异常通知

//增强类
@Component
@Aspect //生成代理对象
public class UserProxy {
    //前置通知
    @Before(value="execution(* com.muzi.aop.User.add(..))")
    public void before(){
        System.out.println("123");
    }
    //后置通知
    @AfterReturning(value="execution(* com.muzi.aop.User.add(..))")
    public void after(){
        System.out.println("after");
    }
    //异常通知
    @AfterThrowing(value="execution(* com.muzi.aop.User.add(..))")
    public void exception(){
        System.out.println("exception");
    }
    //after方法执行之后执行,afterreturning返回值之后执行
    //环绕通知
    @Around(value="execution(* com.muzi.aop.User.add(..))")
    public void circle(ProceedingJoinPoint pro) throws Throwable {
        System.out.println("环绕之前");
        pro.proceed();
        System.out.println("环绕之后");
    }
}

两个技巧

在AOP中我们可以把公共切入点抽取

@Pointcut(value="切入方法")
public void add(){
    
}
//之后其他的增强的方法只需,将方法写到value中即可,实现了代码的复用
   //异常通知
    @AfterThrowing(value="add()")
    public void exception(){
        System.out.println("exception");
    }

在AOP中我们可以通过**@Order**设置增强方法的优先级

//增强类一
@Component
@Order(1)
class PersonProxy{
   @Before(value="execution(* com.muzi.aop.User.add(..))")
    public void before(){
        System.out.println("1");
    }
}
@Component
@Order(2)
//增强类二
class Person1Proxy{
    @Before(value="execution(* com.muzi.aop.User.add(..))")
    public void before(){
        System.out.println("2");
    }
}
//被增强类
@Component
public class User {
    public void add(){
        System.out.println("add");
    }
//调用被增强方法
    public static void main(String[] args) {
        ApplicationContext app=new ClassPathXmlApplicationContext("bean2.xml");
        User user = app.getBean("user", User.class);
        user.add();

    }
}
输出结果
1
2
add

显然值越小,优先级越高

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值