At that time, you can use methodInterceptor.
- structure
- TestMethodInterceptor.java
package org.blog.test.service.component; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.springframework.stereotype.Component; @Component public class TestMethodInterceptor implements MethodInterceptor { @Override public Object invoke(MethodInvocation invocation) throws Throwable { System.out.println("before method"); Object retVal = invocation.proceed(); System.out.println("after method"); return retVal; } }
- TestMethodConfig.java
package org.blog.test.service.config; import org.blog.test.service.TestService; import org.springframework.aop.framework.ProxyFactoryBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; @Configuration public class TestMethodConfig { @Autowired private TestService testService; @Bean @Primary public ProxyFactoryBean testProxyFactoryBean() { ProxyFactoryBean testProxyFactoryBean = new ProxyFactoryBean(); testProxyFactoryBean.setTarget(testService); testProxyFactoryBean.setInterceptorNames("testMethodInterceptor"); return testProxyFactoryBean; } }
- TestServiceImpl.java
package org.blog.test.service.impl; import org.blog.test.service.TestService; import org.springframework.stereotype.Service; @Service public class TestServiceImpl implements TestService { @Override public void testMethod() { System.out.println("testService String"); } }
- TestService.java
package org.blog.test.service; public interface TestService { void testMethod(); }
- TestApplication.java
package org.blog.test; import org.blog.test.service.TestService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class TestApplication implements CommandLineRunner { @Autowired private TestService testService; public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } @Override public void run(String... arg0) throws Exception { testService.testMethod(); } }
- pom.xml
4.0.0 org.blog.test method-interceptor-project 0.1.0 org.springframework.boot spring-boot-starter-parent 1.3.2.RELEASE org.springframework.boot spring-boot-starter-web org.projectlombok lombok 1.16.6 org.springframework.boot spring-boot-maven-plugin
- Execution Result
You can find the log that interceptor method was executed.
2016-02-21 23:23:06.283 INFO 9808 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) before method testService String after method 2016-02-21 23:23:06.295 INFO 9808 --- [ main] org.blog.test.TestApplication : Started TestApplication in 3.972 seconds (JVM running for 4.402)
original source : http://www.mkyong.com/spring/spring-aop-examples-advice/
Is it possible to register the interceptor and the class/method being intercepted without annotations/xml?
답글삭제Is there any reason to make the interceptor without annotation/xml setting?? I think it is the easiest way to register the interceptor for the service class.
삭제