Spring AOP - AspectJ - @AfterReturning example
来源:互联网 发布:淘宝综合排名规则 编辑:程序博客网 时间:2024/05/22 06:15
Last few pages talked about spring advices (before advice, after return advice, around advice and pointcut examples). In this page you will get an idea about how to integrate AspectJ annotations with Spring AOP framework. Using spring AOP and AspectJ, you can easily intercept methods.
AspectJ comes with below annotations:
1) @Before
2) @After
3) @AfterReturning
4) @AfterThrowing
5) @Around
In this page we will see an example for @AfterReturning
annotation. @AfterReturning
annotation intercepts method after calling it. You have seen similar behavior with @After
annotation in the previous example, but @AfterReturning
will intercept the return value as well.
pom.xml
file gives all required dependencies: Add dependencies for spring-aop
jar, aspectjrt
jar and aspectjweaver
jar file.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>SpringJavaBasedConfig</groupId> <artifactId>SpringJavaBasedConfig</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <spring.version>3.2.0.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.0</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.0</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.1</version> </dependency> </dependencies></project>
My business logic service class:
package com.java2novice.bean;public class MyBusinessService { public String runMyBusinessLogic(){ System.out.println("************************************"); System.out.println("Running business logic..."); System.out.println("************************************"); return "Successfully executed my business logic"; } public void testThrowException() { throw new NullPointerException(); }}
Here is the Aspect class example. The after()
method will be executed after calling the method. Note here you have specified “returning
” attribute as part of your annotation. Make sure that the annotation returning attribute value should be same as method input parameter.
package com.java2novice.aop;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Aspect;@Aspectpublic class RunAfterExecution { @AfterReturning( pointcut="execution(* com.java2novice.bean.MyBusinessService.runMyBusinessLogic(..))", returning="returnValue") public void runAfter(JoinPoint joinPoint, String returnValue) throws Throwable { System.out.println("Inside RunAfterExecution.afterReturning() method..."); System.out.println("inserted after : " + joinPoint.getSignature().getName()); System.out.println("Method returned value is : " + returnValue); }}
Here is the xml based configuration file. By adding “<aop:aspectj-autoproxy />
” tag, you can enable AspectJ with in your application. Add bean definitions for your normal bean and your Aspect.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <aop:aspectj-autoproxy /> <bean id="busService" class="com.java2novice.bean.MyBusinessService" /> <bean id="beforeAspectBean" class="com.java2novice.aop.RunAfterExecution" /> </beans>
Here is the final demo class:
package com.java2novice.test;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.java2novice.bean.MyBusinessService;public class SpringDemo { public static void main(String a[]){ String confFile = "applicationContext.xml"; ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(confFile); MyBusinessService busServ = (MyBusinessService) context.getBean("busService"); busServ.runMyBusinessLogic(); }}
Output:
************************************Running business logic...************************************Inside RunAfterExecution.afterReturning() method...inserted after : runMyBusinessLogicMethod returned value is : Successfully executed business logic
- Spring AOP - AspectJ - @AfterReturning example
- [Spring AOP] 基于AspectJ的@AfterReturning注释示例=
- [Spring AOP] 基于AspectJ的@AfterReturning注释示例
- Spring AOP + AspectJ Annotation Example
- Spring AOP + AspectJ Annotation Example
- Spring AOP + AspectJ Annotation Example
- spring aop + aspectj annotation example
- Spring AOP + AspectJ annotation example
- Spring AOP + AspectJ annotation example
- Spring AOP + AspectJ annotation example
- Spring AOP - AspectJ - @Before example
- Spring AOP - AspectJ - @After example
- Spring AOP - AspectJ - @AfterThrowing example
- Spring AOP + AspectJ in XML configuration example
- Spring AOP + AspectJ in XML configuration example
- 基于Annotation的Spring AOP: @AfterReturning
- 3.spring的aop之@AfterReturning
- Spring AOP(二)之AfterReturning增强处理
- java.lang.UnsupportedClassVersionError: Bad version number in .class file异常的处理方法
- SQLite从Excel文件中导入数据
- 百度推送 tags 分组推送
- test3.12
- iOS开发笔记--Layer 图层圆角、边框 、底纹其他常用操作
- Spring AOP - AspectJ - @AfterReturning example
- English summary Over the past year
- Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport Security policy requir
- android图片:高效加载大图
- 心得
- MyEclipse在导入jQuery类库后报错的解决办法。
- 使用if IE语句判断浏览器IE版本及添加升级提示
- IPC框架分析 Binder,Service,Service manager
- Gradle 构建android程序