SpringAop

SpringAop,第1张

AOP(面向切面编程)

切入点:匹配连接点的式子,能代表一个或者多个方法

连接点:程序中执行仍一位置,理解为方法的执行

通知:在切入点执行的 *** 作,是共性功能

通知类:定义通知类

切面:描述通知与切入点的对应关系

入门案例

注解关系:

@EnableAspectJAutoProxy(aop注解代理自动配置)-->@Aspect(作为aop的类)-->@Pointcut()@Before
@Aspect//
public class MyAdvice {
//    定义切入点,excution执行的意思,void是update方法的返回值uodata()里面无参不需要加..,反之需要加
    @Pointcut("execution(void com.example.dao.BookDao.update())")
    public void pt(){

    }
//        定义通知
    @Before("pt()") //切面
    public void method(){
        System.out.println(System.currentTimeMillis());
    }
}

AOP工作流程

1,Spring容器启动

2,读取所有配置的切入点

3,初始化bean判断类中的方法是否匹配到切入点

匹配失败,创建对象

匹配成功,创建原始对象(目标对象)的代理对象

4,获取bean执行方法

获取bean,调用方法执行,完成

获取的bean是代理对象,就根据代理的运行模式运行原始方法活着增强的内容,完成 *** 作

***创建的对象虽然一样,但是匹配成功后的是代理运行的,通过BookDao的getClass可以发现

 AOP切入点表达式

切入点表达式:

 AOP通知类型

前置通知:**

后置通知:**

异常通知:**

环绕通知:(重点)

//        定义通知
    @Around("pt()") //环绕通知Proceedingjoinpoint 继承了 JoinPoint。是在JoinPoint的基础上暴露出 proceed 这个方法。proceed很重要,这个是aop代理链执行的方法。
    public Object method(ProceedingJoinPoint pjt) throws Throwable {
        System.out.println("Before>>>>");
        Object proceed = pjt.proceed();//需要暴露接入点的方法,否则不会执行
        System.out.println("After>>>>");
        return proceed;
    }

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/735519.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-27
下一篇2022-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存