Spring集成AspectJ的注解模式
2016-03-05 16:54
731 查看
过去曾经记录过基础的Spring AOP:http://blog.csdn.net/sadfishsc/article/details/8875110
不过在实际工作中,这种非常早期的AOP写法由于比较繁琐,使用得并不多。大多数情况下使用的是spring集成aspectj提供的注解模式的AOP
如下是一个简单的例子:
注解模式的aspectj中,切面逻辑、切入点等都需要集中定义在一个类中。其中:
@Pointcut注解定义了切入点,它通过一个execution表达式来指定需要切入的类和方法,将本注解所在的方法与切入的方法绑定,后续的操作中都直接使用注解所在方法的方法名来映射被切入的方法(因而本方法只需为空即可)。pointcut可定义多个
Aspectj提供了多种类型的切面逻辑:主要有@After(方法结束)、@AfterReturning(方法返回)、@AfterThrowing(方法抛出异常)、@Before(方法开始前)、@Around(方法前后)这五个针对方法的注入,以及其它一些针对变量声明的注入(不常用)
从注解的参数列表中可以看出该注解所对应的切面逻辑能提供什么样的参数,如:@AfterReturning的returning参数,可以指定目标方法的返回值在本切面逻辑中的变量名;@AfterThrowing的throwing参数,可以指定目标方法抛出的异常对象在本切面逻辑中的变量名。除此而外,所有的切面注解都必有两个参数:value和argNames,value用于指定pointcut的方法名,argNames则是目标方法各参数在本切面逻辑中的方法名
切面方法自带一个参数叫JoinPoint,其中保存了方法的一些元数据信息,最有用的便是可以从中直接获取参数对象列表,以及可以直接获取到作为注入点的目标对象
不过在实际工作中,这种非常早期的AOP写法由于比较繁琐,使用得并不多。大多数情况下使用的是spring集成aspectj提供的注解模式的AOP
如下是一个简单的例子:
1. Maven依赖
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.5</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.5</version> </dependency>
2. spring配置
由于是注解模型,因此在spring的配置文件中需要的配置其实很少,主要有二:component-scan 和 aspectj-autoproxy:<context:component-scan base-package="..." /> <aop:aspectj-autoproxy proxy-target-class="true" />
3. 添加注解
@Aspect @Component public class MyAspect { @Pointcut("execution(* cn.hibrant.liu.Test.run(..))") public void pointcut() { } @AfterReturning(value = "pointcut()", returning = "result") public void after(JoinPoint jp, JSONObject result) throws Exception { ... } @AfterThrowing(value = "pointcut()", throwing = "exception") public void afterThrowingException(JoinPoint jp, Exception exception) { ... } }
注解模式的aspectj中,切面逻辑、切入点等都需要集中定义在一个类中。其中:
@Pointcut注解定义了切入点,它通过一个execution表达式来指定需要切入的类和方法,将本注解所在的方法与切入的方法绑定,后续的操作中都直接使用注解所在方法的方法名来映射被切入的方法(因而本方法只需为空即可)。pointcut可定义多个
Aspectj提供了多种类型的切面逻辑:主要有@After(方法结束)、@AfterReturning(方法返回)、@AfterThrowing(方法抛出异常)、@Before(方法开始前)、@Around(方法前后)这五个针对方法的注入,以及其它一些针对变量声明的注入(不常用)
从注解的参数列表中可以看出该注解所对应的切面逻辑能提供什么样的参数,如:@AfterReturning的returning参数,可以指定目标方法的返回值在本切面逻辑中的变量名;@AfterThrowing的throwing参数,可以指定目标方法抛出的异常对象在本切面逻辑中的变量名。除此而外,所有的切面注解都必有两个参数:value和argNames,value用于指定pointcut的方法名,argNames则是目标方法各参数在本切面逻辑中的方法名
切面方法自带一个参数叫JoinPoint,其中保存了方法的一些元数据信息,最有用的便是可以从中直接获取参数对象列表,以及可以直接获取到作为注入点的目标对象
相关文章推荐
- asp链接access2010数据库
- CuteEditor.Editor for asp.net is licensed
- ASP.NET三层划分与命名方式
- asp.net设置元素css的属性
- <ASP.NET4 从入门到精通>学习笔记3
- 7天 搞定 ASP.NET MVC - 第5天
- Asp.Net MVC中DropDownListFor的用法(转)
- ASP.NET导入导出
- ASP.NET分页控件
- ASP.NET文件的上传下载提交分页
- C/C++通过gSoap发布webservice接口,供ASP.Net网站工程调用
- ASP.NET获取客户端浏览器信息!
- ASP.NET简单登录注册实例
- Asp.Net MVC anti-forgery token的问题:nameidentifier not present
- Getting Started with ASP.NET Web API 2 (C#)
- Asp.Net MVC Filter权限过滤使用说明
- 在ASP.NET程序中存储和调用word文件
- How to Choose the Best Way to Pass Multiple Models in ASP.NET MVC
- 利用Aspose.Word控件实现Word文档的操作
- asp.net使用signalr实现集群集群下面的消息推送