面向切面AOP

面向切面AOP

1-介绍

AOP思想,不通过修改源代码的方式,在主干方法中添加新的功能,可以增强某个方法;

  • 类里的某个方法可以被增强时,称能够被增强的方法为连接点
  • 真正被增强的方法,称为切入点
  • 增强的逻辑部分称为通知
  • 5种类型的通知:前置通知、后置通知、环绕通知、异常通知、最终通知
  • 把通知应用到切入点的过程,称为切面

2-底层原理

情况1:有接口的情况

这类情况很好处理,直接使用JDK动态代理的方法,创建代理对象实现增强方法,实质使用到了Java的动态代理特性,详细介绍参照我的另一篇博客,https://blog.csdn.net/Wang_Pro/article/details/114481171的动态代理。

情况2:没有提供接口

使用CGLIB动态代理

3-基于AspectJ实现AOP操作

  1. 基于注解方式进行实现
  • 切入点表达式:execution([权限修饰符] [返回类型] [类全路径] 方法名称 )
  • 增强类上使用@Aspect进行增强类声明
  • 在增强类中配置不同类型的通知
    • @before(value = “execution(…)”)
    • @AfterReturning(value = “execution(…)”)
    • @After(value = “execution(…)”)
    • @AfterThrowing(value = “execution(…)”)
    • @Around(value = “execution(…)”)
  • xml文件开启扫描,或者写一个注解类

问题:如果一个基本类有多个类对它进行增强,怎么办?

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

问题:如果想对切入点表达式进行抽取

那就写一个专门抽取它的类

@Pointcut(value = "execution(* com.atguigu.spring5.aopanno.User.add(..))")
public void pointdemo() {
}

// 之后使用,完成表达式抽取
@Before(value = "pointdemo()")
public void before() {
System. out .println( "before.........");
}
  1. 使用xml配置进行增强实现
<!--创建对象-->
< bean id= "book" class= "com.atguigu.spring5.aopxml.Book"></ bean>
< bean id= "bookProxy" class= "com.atguigu.spring5.aopxml.BookProxy"></ bean>

3 、在 spring 配置文件中配置切入点
<!--配置 aop 增强-->
<aop:config>
	<!--切入点-->
	< aop:pointcut id= "p" expression= "execution(*
	com.atguigu.spring5.aopxml.Book.buy(..))"/>
	<!--配置切面-->
	<aop:aspect ref= "bookProxy">
	<!--增强作用在具体的方法上-->
		<aop:before method= "before" pointcut-ref= "p"/>
	</aop:aspect>
</aop:config>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值