共计 1511 个字符,预计需要花费 4 分钟才能阅读完成。
概述
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 获取属性
正文完