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