Proxy Factory Bean Example
/* Pro Spring By Rob Harrop Jan Machacek ISBN: 1-59059-461-4 Publisher: Apress */ /////////////////////////////////////////////////////////////////////////////////////// //File:pfb.xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="myBean1" class="MyBean"> <property name="dep"> <ref local="myDependency1"/> </property> </bean> <bean id="myBean2" class="MyBean"> <property name="dep"> <ref local="myDependency2"/> </property> </bean> <bean id="myDependencyTarget" class="MyDependency"/> <bean id="myDependency1" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target"> <ref local="myDependencyTarget"/> </property> <property name="interceptorNames"> <list> <value>advice</value> </list> </property> </bean> <bean id="myDependency2" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target"> <ref local="myDependencyTarget"/> </property> <property name="interceptorNames"> <list> <value>advisor</value> </list> </property> </bean> <bean id="advice" class="MyAdvice"/> <bean id="advisor" class="org.springframework.aop.support.DefaultPointcutAdvisor"> <property name="advice"> <ref local="advice"/> </property> <property name="pointcut"> <bean class="org.springframework.aop.support.JdkRegexpMethodPointcut"> <property name="pattern"> <value>.*foo.*</value> </property> </bean> </property> </bean> </beans> /////////////////////////////////////////////////////////////////////////////////////// import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; public class MyAdvice implements MethodBeforeAdvice { public void before(Method method, Object[] args, Object target) throws Throwable { System.out.println("Executing: " + method); } } /////////////////////////////////////////////////////////////////////////////////////// public class MyBean { private MyDependency dep; public void execute() { dep.foo(); dep.bar(); } public void setDep(MyDependency dep) { this.dep = dep; } } /////////////////////////////////////////////////////////////////////////////////////// public class MyDependency { public void foo() { System.out.println("foo()"); } public void bar() { System.out.println("bar()"); } } /////////////////////////////////////////////////////////////////////////////////////// import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class ProxyFactoryBeanExample { public static void main(String[] args) { ApplicationContext ctx = new FileSystemXmlApplicationContext( "build/pfb.xml"); MyBean bean1 = (MyBean)ctx.getBean("myBean1"); MyBean bean2 = (MyBean)ctx.getBean("myBean2"); System.out.println("Bean 1"); bean1.execute(); System.out.println("\nBean 2"); bean2.execute(); } }