
切入点:匹配连接点的式子,能代表一个或者多个方法
连接点:程序中执行仍一位置,理解为方法的执行
通知:在切入点执行的 *** 作,是共性功能
通知类:定义通知类
切面:描述通知与切入点的对应关系
入门案例注解关系:
@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;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)