import org.aopalliance.aop.Advice;
import org.springframework.aop.Advisor;
import org.springframework.aop.Pointcut;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.support.DefaultPointcutAdvisor;
/**
* 客户端测试
*/
public class StaticPointcutExample {
public static void main(String[] args) {
//创建目标对象
BeanOne one = new BeanOne();
BeanTwo two = new BeanTwo();
//定义代理对象
BeanOne proxyOne;
BeanTwo proxyTwo;
//创建一个切入点
Pointcut pc = new SimpleStaticPointcut();
//创建一个通知
Advice advice = new SimpleAdvice();
//创建一个通知者(即通知和切入点的结合)
Advisor advisor = new DefaultPointcutAdvisor(pc, advice);
//创建一个代理工厂
ProxyFactory pf = new ProxyFactory();
//将方面加入工厂
pf.addAdvisor(advisor);
//将目标加入工厂
pf.setTarget(one);
//获取代理对象产品
proxyOne = (BeanOne) pf.getProxy(); //这个时候会进行匹配检查
//创建一个代理工厂
pf = new ProxyFactory();
pf.addAdvisor(advisor);
pf.setTarget(two);
proxyTwo = (BeanTwo) pf.getProxy();
/*
org.springframework.aop.framework.ProxyFactory中
设置的代理目标一次仅能一个,这点不要犯迷糊,我查过源码了.
*/
//从代理产品上调用目标方法
proxyOne.foo();
proxyTwo.foo();
proxyOne.bar();
proxyTwo.bar();
}
}
运行结果:
- Using JDK 1.4 collections
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne类!
切入点方法匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne的foo方法!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne类!
切入点方法匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne的bar方法!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne类!
切入点方法匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne的hashCode方法!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne类!
切入点方法匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne的toString方法!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanTwo类!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanTwo类!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanTwo类!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanTwo类!
切入点类匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne类!
切入点方法匹配,正在匹配com.apress.prospring.ch6.staticpc.BeanOne的foo方法!
>> 业务方法调用前动作,被代理调用目标方法是: foo
BeanOne的foo()被调用!
>> 业务方法调用结束后动作!
BeanTwo的foo()被调用!
BeanOne的bar()被调用!
BeanTwo的bar()被调用!
Process finished with exit code 0
上一页 [1] [2] [3]

【责编:Ken】