package spring.test; import org.springframework.aop.framework.ProxyFactory; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.aop.support.NameMatchMethodPointcut; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub /*ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/spring/test/applicationContext.xml"); ITest t = (ITest)context.getBean("testProxy"); t.getName());*/ ITest test = new TestImp(); ProxyFactory proxyFactory = new ProxyFactory(test); NameMatchMethodPointcut pc = new NameMatchMethodPointcut(); pc.setMappedName("getName"); Advice ad = new Advice(); DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(); advisor.setAdvice(ad); advisor.setPointcut(pc); proxyFactory.addAdvisor(advisor); ITest testProxy = (ITest)proxyFactory.getProxy(); testProxy.getName(); } }
package spring.test; public interface ITest { public String getName(); }
package spring.test; public class TestImp implements ITest { @Override public String getName() { String name = "ding chao"; return name; } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="test" class="spring.test.TestImp"></bean> <bean id = "advice" class="spring.test.Advice"></bean> <bean id ="pointcut" class="org.springframework.aop.support.NameMatchMethodPointcut"> <property name="mappedNames"> <list> <value>getName</value> </list> </property> </bean> <bean id="testProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="targetName"> <value>test</value> </property> <property name="interceptorNames"> <list> <value>advisor</value> </list> </property> </bean> <bean id="advisor" class="org.springframework.aop.support.DefaultPointcutAdvisor"> <property name="pointcut" ref="pointcut"></property> <property name="advice" ref="advice"></property> </bean> </beans>