AOP

AOP(Aspect Oriented Programming),是面向切面编程的技术。AOP基于IOC基础,是对OOP的有益补充。

AOP将应用系统拆分为个部分:核心业务逻辑及横向的通用逻辑,也就是所谓的切面。

举例:所有大中型应用都要涉及到的持久化管理、事务管理、权限管理、日志管理和调试管理等。使用AOP技术可以让开发人员只专注核心业务,而通用逻辑则使用AOP技术进行横向切入,由专人去处理这些通用逻辑,会使得任务简单明了,提高开发和调试的效率。

Target:目标类

Joinpoint:连接点是指所有可能织入通知的方法理论上大部分方法都是连接点

Pointcut:切入点,已经被增强的方法

Advice:通知,增强的方法

Aspect:切面,通知所在的类就叫切面。

Weaving:织入,将通知应用到目标对象来创建新的代理对象的过程。

 通知的类型: 前置通知 后置通知 返回通知 异常通知 环绕通知

各类通知的执行顺序: 前置通知 2.执行目标方法 3.执行后置通知 4.返回通知||异常通知

前置通知,后置通知,返回通知,异常通知都可以接受一个JoinPoint类型的对象作为参数。该对象封装了连接点的相关信息。主要关注:方法参数和方法签名。

返回通知的returning属性可以将目标方法的返回值定义一个名字,然后在返回通知的形参上声明一个同名的Object类型的参数,来访问方法的返回结果。

环绕通知 环绕通知必须要有返回值(Object类型)

环绕通知必须要有形参(ProceedingJoinPoint pjp)

在环绕通知中,通过pjp.proceed()方法显示调用目标对象的切点并将结果返回出去。

使用注解配置aop

引入约束 beans context aop 扫描包 开启注解式的aop

在业务类上加上注解(@Component)

在属性上加@Autowired注解

在切面类上加注解 (@Component  @Aspect)

在通知上加上相应的注解 @Before(value="")

@AfterReturning(returning="目标切点返回值的名字") 在通知方法参数只能为Object

@AfterThrowing(throwing="异常的名字") 在通知方法参数可以为Object也可为Exception

重用切入点表达式: 在切面中定义一个空的方法,在方法上加@Pointcut注解,在value属性中指定切入点表达式 @Pointcut(value=“execution(* com.cdsxt.dao.*.*(..))”) Public void pointcutExpression(){} @Before(value="pointcutExpression()")

在面对多个切面时可以在类上加@Order(1)数字越小越优先执行

AOP_第1张图片

AOP两种代理的区别:

AOP支持2种代理,jdk的动态代理和CGLIB实现机制。

jdk基于接口实现:jdk动态代理对实现了接口的类进行代理。

CGLIB基于继承:CGLIB代理可以对类代理,主要对指定的类生成一个子类,因为是继承,所以目标类最好不要使用final声明。

通常情况下,鼓励使用jdk代理,因为业务一般都会抽象出一个接口,而且不用引入新的东西。如果是遗留的系统,以前没有实现接口,那么只能使用CGLIB。

 

你可能感兴趣的:(spring)