# spring_b2 **Repository Path**: li_knight/spring_b2 ## Basic Information - **Project Name**: spring_b2 - **Description**: 学习日志:AOP简单的计算器例子 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-25 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # spring_b2 ## 介绍 学习日志:AOP简单的计算器例子 ## 内容 #### 通知类型 环绕通知:在目标方法执行前和执行后实施增强,可应用于日志记录、事务处理等功能 前置通知:是在目标方法执行前实施增强,可应用于权限管理等功能 后置返回通知:是在目标方法成功执行后实施增强,可应用于关闭流、删除临时文件等功能 后置通知:最终通知,是在目标方法执行后进行增强,不论方法执行成功与否都会执行,该通知可应用于释放资源 异常通知:是在方法抛出异常后实施增强,可应用于处理异常、记录日志 引入通知:是在目标类中添加一些新的方法和属性,可应用于修改目标类(增强类) #### 基于注解开发AspectJ @Aspect:用于定义一个切面 @Pointcut:用于定义切入点表达式,在使用时需要定义一个切入点方法,该方法是一个返回值void且方法体为空的普通方法。 @Before:前置通知 @AfterReturning:后置返回通知 @Around:环绕通知 @AfterThrowing:异常通知 @After:后置通知(最终通知) 如果被代理的目标对象实现了接口,那么Spring会默认使用JDK动态代理。所有该目标类型实现的接口都将被代理。若该目标对象没有实现任何接口,则创建一个CGLIB代理。 #### 基于XML配置开发AspectJ :开发AspectJ的顶层配置元素,在配置文件的< beans>下可以包含多个该元素 :配置一个切面,属性ref指定切面的定义 :配置一个切点,属性expression指定通知增强哪些方法(expression="execution(* com.cn.* . * (..))是定义切点表达式,意思是匹配com.cn包中任意类的任意方法执行;注:第一个 * 返回值类型,使用 * 代表所有类型;com .cn表示的是需要匹配的包名,后面第二个 * 代表的是类名,第三个 * 代表的是方法名,(..)代表方法参数 :配置前置通知,method指定前置通知的方法,属性pointcut-ref指定关联的切入点 :后置返回通知 :环绕通知 :异常通知 :后置通知 :给通知引入新的额外接口,增强功能 关于各种通知的执行顺序,与配置文件中的申明顺序有关 #### 多切面执行的顺序 前置、后置相反,先进来的后出去,后进来的先出去;我们可以通过切面名称的排序来更改那个切面先进来; @Order注解,来进行配置多切面运行的顺序,默认是最大值 加环绕时要清楚环绕在那个切面,与其他切面无关,环绕也无法改变其他切面的优先级 #### AOP的应用场景 1、AOP加载日志保存到数据库 2、AOP做权限验证 3、AOP做安全检查 4、AOP做事务控制