AOP

概述

Spring对面向切面编程提供了强有力的支持,通过它让我们将业务逻辑从应用服务(如事务管理)中分离出来,实现了高内聚开发,应用对象只关注业务逻辑,统问题(如日志、事务等)。Spring支持用户自定义切面。面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面
1.面向切面编程提供声明式事务管理
2.spring支持用户自定义的切面
面向切面编程(aop)是对面向对象编程(oop)的补充,面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。
在不影响主业务的情况下对其业务功能的扩充
AOP(面向切面) spring重要的部分,另一个是IOC(控制反转),基于OCP开闭原则

切面术语

2.1切面(aspect):横切面向对象,一般为一个具体的类
2.2切入点(pointcut):定义了切入扩展业务逻辑的位置(一般需要业务扩展的地方),一般会通过表达式进行相关定义,一个切面可以定义多个切入点
2.3通知(Advice):内部封装扩展业务逻辑的具体方法对象,一个切面可以有多个通知
2.4连接点(join point):程序执行过程中,封装了某个正在执行的目标方法信息的对象,可以通过此对象获取具体目标方法的相关信息,甚至调用目标方法

切面常用的注解

@Retention(RetentionPolicy.RUNTIME)  表名此切面在程序运行时起作用
@Target(ElementTypr.
    1.CONSTRUCTOR:用于描述构造器
    2.FIELD:用于描述域
    3.LOCAL_VARIABLE:用于描述局部变量
    4.METHOD:用于描述方法
    5.PACKAGE:用于描述包
    6.PARAMETER:用于描述参数
    7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
例子:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) 
public @interface Requiredlog {
    String operation() default "" ;//默认空串  @Requiredlog(operation = "公告查询")

}

@Aspect  定义切面(创建切面对象)
@Component  告诉spring这个是普通组件

@Pointcut定义切入点
@annotation切入点表达式,由此注解描述的方法为切入方法
 @Pointcut("@annotation(com.cy.common.annotation.Log)")
    public void doLoger(){}

通知类型
//@Around("doLoger()")生效范围

@Before:
作用:把当前方法看成是前置通知。
实现操作:可以用来对数据的过滤或者预处理的操作

@AfterReturning
作用:把当前方法看成是后置通知。
实现操作:据的缓存更新、清除

@AfterThrowing
作用:把当前方法看成是异常通知。
实现操作:进行错误日志的记录,报警,发送邮件,短信等等

@After    
作用:把当前方法看成是始终通知。
实现操作:一般是资源释放的操作(最后)

@Around
作用:把当前方法看成是环绕通知。
ProceedingJoinPoint   pj封装目标对象的相关信息

@Requiredlog(operation = "删除")在需要扩展的地方引入切面(自定义注解的引入)

getDeclaredField 获取属性

切面顺序

通过@order() 来设置切面的优先级

异步线程

在启动类上加@EnableAsync,在要实现的异步方法上加 @Async  ,异步切入点













你可能感兴趣的:(javaspringboot)