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>