File: context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="test" class="TestBean"/>
<bean class="LoggingAspectPC">
<property name="beforeMessage" value="Before %s %s"/>
<property name="afterMessage" value="After %s %s"/>
</bean>
<aop:aspectj-autoproxy />
</beans>
File: Main.java
import java.util.Arrays;
import javax.annotation.PostConstruct;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("context.xml");
TestBean testBean = (TestBean) ac.getBean("test");
testBean.work();
testBean.stop();
}
}
class TestBean {
public void work() {
System.out.println("work");
}
public void stop() {
System.out.println("stop");
}
}
@Aspect
class LoggingAspectPC {
private String beforeMessage;
private String afterMessage;
@Pointcut("execution(* TestBean.*(..))")
private void testBeanExecution() { }
@Around("testBeanExecution()")
public Object log(ProceedingJoinPoint pjp) throws Throwable {
System.out.println(this.beforeMessage);
System.out.println(pjp.getSignature().getName());
System.out.println(Arrays.toString(pjp.getArgs()));
Object ret = pjp.proceed();
System.out.println(this.afterMessage);
System.out.println(pjp.getSignature().getName());
System.out.println(Arrays.toString(pjp.getArgs()));
return ret;
}
@After("testBeanExecution()")
public void afterCall(JoinPoint jp) {
System.out.println("After");
}
@PostConstruct
public void initialize() {
System.out.println("initialize:"+this.beforeMessage);
System.out.println("initialize:"+this.afterMessage);
}
public void setBeforeMessage(String beforeMessage) {
this.beforeMessage = beforeMessage;
}
public void setAfterMessage(String afterMessage) {
this.afterMessage = afterMessage;
}
}
Download: Spring-AspectAnnotationPointcutAroundAfter.zip( 4,651 k)