AOP(Aspect Oriented Programming)面向切面思想

1. 什么是AOP?

AOP(Aspect Oriented Programming)面向切面思想,是Spring的三大核心思想之一(AOP-面向切面、IOC-控制反转、DI-依赖注入 )。

AOP,一般称为面向切面,作为面向对象OOP的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,提高系统的可维护性。可用于权限认证、日志、事务处理

2. 为什么用AOP?

Java是一个面向对象(OOP)的编程语言,但它有个弊端就是当需要为多个不具有继承关系的对象引入一个公共行为时,例如日志记录、权限校验、事务管理、统计等功能,只能在每个对象里都引用公共行为,这样做不便于维护,而且有大量重复代码,AOP的出现弥补了OOP的这点不足。

例如:

 有多少个业务操作,就要写多少重复的校验和日志记录代码,这显然是无法接受的。当然用面向对象的思想,可以把这些重复的代码抽离出来,写成公共方法,就是下面这样:

 代码冗余和可维护性的问题得到了解决,但每个业务方法中依然要依次手动调用这些公共方法,也是略显繁琐。 有没有更好的方式呢?

有的!那就是AOP,AOP将权限校验、日志记录等非业务代码完全提取出来,与业务代码分离,并寻找节点切入业务代码中 。

业务代码和非业务代码完全分离。

3. AOP体系结构

1.哪里切入? 2. 什么时候切入? 3. 切入后做的功能是?

AOP要做的三件事:在哪里切入,也就是权限校验,等非业务操作在哪些业务代码中执行;什么时候切入,是业务代码执行前还是执行后;切入后做什么事,比如做权限校验、日志记录等。

 

  • Pointcut:切点,决定处理如权限校验、日志记录等在何处切入业务代码中(即织入切面)。切点分为execution方式和annotation方式。前者可以用路径表达式指定哪些类织入切面,后者可以指定被哪些注解修饰的代码织入切面。
  • Advice:处理,包括处理时机和处理内容。处理内容就是要做什么事,比如校验权限和记录日志。处理时机就是在什么时机执行处理内容,分为前置处理(即业务代码执行前)、后置处理(业务代码执行后)等。
  • Aspect:切面,即Pointcut和Advice。
  • Joint point:连接点,是程序执行的一个点。例如,一个方法的执行或者一个异常的处理。在 Spring AOP 中,一个连接点总是代表一个方法执行。
  • Weaving:织入,就是通过动态代理,在目标对象方法中执行处理内容的过程。

pointcut切点:切入点。

advice:处理。处理的时机:before after around afterThrowing AfterReturning。

joinpoint:连接点,被处理的方法。

4. AOP原理

底层实现原理:动态代理

实现动态代理的方式有两种:JDK动态代理和Cglib动态代理。

如果代理的类实现了接口则使用JDK动态代理。如果没有实现接口Cglib动态代理。

提到JDK代理和Cglib代理两种动态代理,优秀的Spring框架把两种方式在底层都集成了进去,无需担心自己去实现动态生成代理。

那么Spring是如何生成代理对象的?

创建容器对象的时候,根据切入点表达式拦截的类,生成代理对象。如果目标对象有实现接口,使用JDK代理。如果目标对象没有实现接口,则使用Cglib代理。然后从容器获取代理后的对象,在运行期植入"切面"类的方法。

如果目标类没有实现接口,且class为final修饰的,则不能进行Spring AOP编程。

5.总结

AOP是一种动态的技术思想, 目的是实现业务功能和非业务功能的解耦合。
业务功能是独立的模块, 其他功能也是独立的模块。例如事务功能、日志等等。 让事务、日志功能是可以被复用的。

当目标方法需要一些功能时,可以在不修改,不能修改源代码的情况下, 使用AOP技术在程序执行期间,生成代理对象, 通过代理执行业务方法,同时增加功能。

 

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值