File: context.xml
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">
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;
}
}
Spring-AspectAnnotationPointcutAroundAfter.zip( 4,650 k)