Aspect Annotation Pointcut AroundAfter
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; } }