概述
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 获取属性