Service.java
package bean; public interface Service { public void service(); }
ServiceImpl.java
package bean; public class ServiceImpl implements Service { //业务方法 public void service() { // TODO Auto-generated method stub System.out.println("i'm servicing"); } }
package interceptor; import org.springframework.stereotype.Component; @Component public class Interceptor { public void before() { System.out.println("服务即将开始"); } public void afterReturning() { System.out.println("returning"); } public void afterThrowing(RuntimeException ex) { System.out.println("find exception:" + ex.getMessage()); } }
<?xml version="1.0" encoding="GBK"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <context:component-scan base-package="bean" /> <!-- bean包里面标记@component的类都会自动生成同名bean --> <bean name="interceptor" class="interceptor.Interceptor" /> <aop:config> <aop:pointcut expression="execution(public * bean..*.*(..))" id="allPointcut" /> <!-- 切入点 也就是在什么时候执行切片方法的说明 --> <aop:aspect id="interceptor" ref="interceptor"> <!-- 将上面声明的bean定义为aspect --> <aop:before method="before" pointcut-ref="allPointcut" /> <!-- 在符合pointcut条件时执行method --> </aop:aspect> </aop:config> </beans>
package bean; import java.lang.reflect.Proxy; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.beanfactory; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ServiceTest { @Test public void proxy() { beanfactory factory = new ClassPathXmlApplicationContext( "applicationContext.xml"); Service s = (Service) factory.getBean("serviceImpl"); s.service(); } }