Spring AOP

1.什么是Spring AOP?

AOP:面向切面编程,是一种思想,它是对某一类事情的集中处理。

例如:对于用户的登陆操作,在需要判断用户登陆的页面,都要各自实现或者调用用户验证的方法,而AOP只需要在某一处配置一下,所有需要判断用户登陆页面就可以实现用户登陆验证了,不需要每个方法中都写相同的用户登陆验证了。

而AOP是一种思想,而Spring AOP是一个框架,提供了一种对AOP思想的实现。Spring AOP可通过AspectJ(注解)的方式来实现AOP的功能。

2.为什么要用AOP?

对于某种功能统一,并且使用的地方较多的功能,可以考虑AOP来统一处理。

除了统一的用户登陆判断之外,AOP还可以实现:

  • 统一日志记录
  • 统一方法执行时间【暴露系统的问题】
  • 统一的返回格式设置
  • 统一的异常处理
  • 事务的开启和提交

也就是使用AOP可以扩充多个对象的某个能力,所以AOP是OOP的补充和完善。

3.AOP组成

3.1 切面

在程序中体现出来就是一个处理某方面具体问题的一个类。类里面包含了很多方法,这些方法就是切点和通知。

3.2 切点【用来进行主动拦截得规则(配置)】

相当于保存了众多连接点的一个集合(如果把切点看成一个表,而连接点就是表中一条一条的数据)

3.3连接点

所有可能会触发AOP规则的所有请求。

3.4通知(Advice)【AOP具体的处理动作】

程序中被拦截请求触发的具体动作(做什么事)就是在通知中实现的具体业务代码。

通知就是定义了切面是什么,什么时候使用,描述了切面要完成的工作,还解决何时执行这个工作的问题。Spring切面类中,可以在方法上使用以下注解,会设置方法为通知方法,在满足条件后会通知本方法进行调用:

  • 前置通知使用@Before:通知方法会在目标方法调用之前执行。
  • 后置通知使用@After:通知方法会在目标方法返回或者抛出异常后调用。
  • 返回通知使用@AfterReturning:目标方法执行了返回数据(return)时,执行的通知。
  • 异常通知使用@AfterThrowing:执行目标方法出现异常时,执行的通知。
  • 环绕通知使用@Around:在目标方法执行的周期范围内(执行之前、执行中、执行后)都可以执行的方法叫做环绕通知。

4.Spring AOP实现步骤

  1.  添加Spring AOP的依赖
  2. 定义切面(创建切面类)
  3. 定义切点(配置拦截规则)
  4.  定义通知的实现

4.Spring AOP实现原理

Spring AOP是构建在动态代理基础上,因此Spring对AOP的支持局限于方法级别的拦截。

比如:用户进行登陆操作的时候,往往会直接访问服务器,但是直接请求的话没办法对身份核对,需要在业务代码里面写对用户身份的验证,这样造成了业务代码污染【因为登陆的校验和业务代码没关系】,现在通过动态代理请求了, 这个时候会通过动态代理进行验证,决定要不要将请求转发给服务器。【ps:只支持方法级别的拦截】

5.动态代理【底层:反射】的两种实现方式

Spring AOP是通过动态代理的方式,在运行期将AOP织入到程序中的,它的实现方式有两种:JDK Proxy和CGLIB。

区别:

  • JDK实现,要求被代理类必须实现接口,在运行时动态的在内存中生成了代理类对象,该代理对象是通过实现同样的接口实现,完成初始化。
  • CGLB:被代理类可以不实现接口,是通过实现被代理类的子类实现动态代理,在运行时动态的生成代理类对象【注意:不能被final修饰】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值