| 
 /*
 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();
 }
 }
 
 
 
 |