Mega Code Archive

 
Categories / Java Tutorial / Spring
 

Aspect Annotation Pointcut Around After

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;     } }