Spring AOP入门教程 博客分类: Spring Spring AOPAOPAspect
1. 什么是Spring AOP?
OOP:核心是对象,关注点是将需求抽象成对象
AOP: 核心是方面,关注点是将共通处理提取,动态的作用到某一批对象方法上
2. AOP相关概念
a. 方面(Aspect)
方面指的是封装共通处理逻辑的组件,可以动态作用到目标组件方法
b. 切入点(Pointcut)
切入点用于指定哪些组件是目标,要追加方面Aspect组件
切入点表达式有以下几种
--方法限定方法表达式(哪些方法用方面组件处理)
execution([修饰符] 返回类型 方法名(参数) [throws 异常])
execution(* add*(..)) 只是限制了方法名必须以add开头
--第一个*表示不限制返回值类型
--add* 表示方法名
--(..) 表示0到多个参数
execution(* com.mscncn.dao.UserDao.insert*(..))
execution(* com.mscncn.dao.*.*(..))
--匹配com.mscncn.dao包下所有类的所有方法
execution(* com.mscncn.dao..*.*(..))
--匹配com.mscncn.dao包下,及其子包下得所有类的所有的方法
--类型限定(类型匹配,则类型中所有方法都启用方面组件处理)
within(包名.类型名)
within(com.mscncn.dao..*)
--匹配com.mscncn.dao包下,及其子包下得所有类的所有方法
--Bean名称限定(利用Bean组件的id或name值限制)
bean(idOrName名)
bean(costListController)
--匹配id或者name=costListController
bean(*Controller)
--匹配id或者name以Controller结尾的bean
c. 通知(Advice)
通知用于指定方面(Aspect)和目标组件之间的作用时机。
Spring提供以下几种的通知类型,对应不同作用时机。
前置通知: 先执行方面,再执行目标方法
后置通知: 先执行目标方法,不出异常,再执行方面
异常通知: 限制性目标方法,发生异常再执行方面
最终通知: 先执行目标方法,有无异常,都要执行方面
环绕通知: 先执行方法(前半部分),在执行目标方法,最后再执行方法(后半部分)
try{
//前置通知
//环绕通知前
目标组件
//环绕通知后
//后置通知
}catch(Exception e){
//异常通知
}finally{
//最终通知
}
4. Spring AOP的使用
--分析需求编写共通处理的方面组件(Aspect)
package com.mscncn.spring.ch03.aspect; public class LoggerBean { public void myBefore(){ System.out.println("前置通知"); } }
--分析需求编写切入点表达式(Pointcut)
需要切入到com.mscncn.spring.ch03包下,以及其子包下得所有类的所有方法
--分析需求选择通知类型(Advice)
前置通知
--分析完成后,配置AOP
<bean id="loggerBean" class="com.mscncn.spring.ch03.aspect.LoggerBean"></bean> <bean id="app" class="com.mscncn.spring.ch03.App"></bean> <aop:config> <!-- 将loggerBean指定为aspect组件 --> <aop:aspect id="loggerAspect" ref="loggerBean"> <!-- 指定通知类型 --> <aop:before method="myBefore" pointcut="within(com.mscncn.spring.ch03.App)"/> </aop:aspect> </aop:config>
测试:
package com.mscncn.spring.ch03; /** * Hello world! * */ public class App { public void ma() { System.out.println("Hello World!"); } }
package com.mscncn.spring.ch03.aspect; public class LoggerBean { public void myBefore(){ System.out.println("前置通知"); } }
@Test public void test1(){ ac.getBean("app",App.class).ma(); }
注意:当springMVC 使用springAOP那么配置信息必须写在SpringMVC的配置文件中。
Spring AOP环绕通知时,必须有返回值。
上一篇: Java文件操作——简单文件搜索
下一篇: 零基础学python-9.3 对象的比较
推荐阅读
-
Spring 注解注入的三种常用的方式 博客分类: Spring spring注解annotationspring
-
Spring AOP入门教程 博客分类: Spring Spring AOPAOPAspect
-
Spring MVC 基于 RequestBodyAdvice 和 ResponseBodyAdvice 全局处理输入输出 博客分类: Spring spring
-
Spring_3 博客分类: Spring SpringFactoryBean注解
-
Spring_2 博客分类: Spring spring配置信息bean
-
Spring_1 博客分类: Spring Spring体系结构IoCjava的反射机制ApplicationContext
-
Spring与MongoDB整合 博客分类: MongoDBSpring mongodbspring
-
Spring与Redis整合 博客分类: SpringRedis redisspring-data-redis
-
Spring与MongoDB整合 博客分类: MongoDBSpring mongodbspring
-
spring-mvc.xml的配置 博客分类: SSH框架 springmvcxml