概述

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