AOP操作两种方式

  

AOP操作(AspectJ注解)

 

AOP操作准备:Spring框架一般基于AspectJ实现AOP操作,

 

       实现方式:基于XML配置文件实现、基于注解方式实现(常用)

 

在项目工程引入AOP相关依赖,

 

 

 

 

     切入点表达式:知道哪个类里面的哪个方法增强

 

  语法结构:execution([权限修饰符][返回类型][类全路径][方法名称]([参数列表]))

 

举例1:对com.atguigu.dao包中BookDao类里的add方法进行增强,

 

  execution(*  com.atguigu.dao.BookDao.add(..))  //用*表示任意修饰符都可以,..表示参数

 

 

 

举例2:对com.atguigu.dao包中BookDao类里的所有方法进行增强,

 

    execution(*  com.atguigu.dao.BookDao.*(..))    //这里*表示所有方法

 

 

 

举例3:对com.atguigu.dao包中所有类,类中所有方法进行增强,

 

     execution(*  com.atguigu.dao.*.*(..)) 

 

1.创建类,,在类中定义方法

2.创建增强类(编写增强逻辑)

  在增强类中,创建方法,让不同的方法代表不同通知类型

3.进行通知的配置,在SpringXML配置文件中,开启注解扫描

 

 

 

 

 

3.1使用注解创建User和UserProxy对象

 

 

 

 

 

 

 

4.在增强类上添加注解@Aspect

 

 

 

 

5.在Spring配置文件开启生成代理对象

 

 

 

 

6.配置不同类型的通知

 

    在增强类里面,在作为通知方法上面添加通知类型注解,使用切入点表达式配置

 

@Component//创建对象注解
@Aspect //生成代理对象
public class UserProxy {
//前置通知
//这个before注解表示前置通知
@Before(value = "execution(* com.atguigu.Springdemo.aop.User.add(..))")//对该路径下方法增强
public void before()
{
System.out.println("before");
}

//最终通知,不管有无异常都执行
@After(value = "execution(* com.atguigu.Springdemo.aop.User.add(..))")
public void after()
{
System.out.println("after");
}

//有异常不执行,后置通知
@AfterReturning(value = "execution(* com.atguigu.Springdemo.aop.User.add(..))")
public void afterReturning()
{
System.out.println("afterReturning");
}

//异常通知
@AfterThrowing(value = "execution(* com.atguigu.Springdemo.aop.User.add(..))")
public void afterThrowing()
{
System.out.println("afterThrowing");
}

//环绕通知
@Around(value = "execution(* com.atguigu.Springdemo.aop.User.add(..))")
public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable
{
System.out.println("环绕之前");
//被增强方法执行
proceedingJoinPoint.proceed();
System.out.println("环绕之后");
}
}

 测试:

 

 

 

 

7.相同切入点抽取(发现5个通知里对execution(* com.atguigu.Springdemo.aop.User.add(..))抽取

 

 

 

 

 

8.有多个增强类,对同一个方法进行增强,设置增强类优先级

 

在增强类上添加注解@Order(数字类型值),值越小,优先级高

 

 

 

 

 

 

 

AOP操作(AspectJ配置文件)理解

1.创建两个类、增强类和被增强类,创建方法

 

 

 

 

2.在Spring配置文件里创建两个类对象

 

 

 

 

3.在Spring配置文件里配置切入点

 

<!--配置aop增强-->
<aop:config>
<!--配置切入点-->
<aop:pointcut id="p" expression="execution(* com.atguigu.Springdemo.aopxml.Book.buy())"/>
<!--配置切面-->
<aop:aspect ref="bookProxy"><!--增强类-->
<!--配置增强作用于具体方法上-->
<!--前面的before指的是做的是before通知、method写的是增强的方法、pointcut-ref作用于哪个切入点-->
<aop:before method="before" pointcut-ref="p"/>
</aop:aspect>
</aop:config>

 

posted @   饿了快点吃  阅读(258)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示