package com.wangyu02; public interface Subject { public void request(); }
package com.wangyu02; public class RealSubject implements Subject { public void request() { System.out.println("真实实现--》关注做菜"); } }
package com.wangyu02; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; public class ProxySubjectAfter implements AfterReturningAdvice { public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable { System.out.println("在方法调用之后"); } }
package com.wangyu02; import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; public class ProxySubjectBefore implements MethodBeforeAdvice { public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable { System.out.println("在方法调用之前"); } }
package com.wangyu02; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Subject sub = (Subject)context.getBean("proxy"); sub.request(); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="before" class="com.wangyu02.ProxySubjectBefore"></bean> <bean id ="after" class ="com.wangyu02.ProxySubjectAfter"></bean> <bean id="subject" class="com.wangyu02.RealSubject"></bean> <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>com.wangyu02.Subject</value> </property> <property name="target"> <ref bean="subject" /> </property> <property name="interceptorNames"> <list> <value>before</value><!-- 对应上面的bean的id --> <value>after</value><!-- 对应上面的bean的id --> </list> </property> </bean> </beans>