FactoryBean咱們以前已經提到過,就是一個建立bean的工廠模式類。而ProxyFactoryBean像其它的FactoryBean實現同樣,只是多引入了一個間接層,也就是代理。若是定義一個名爲bwf的ProxyFactoryBean, 引用bwf的對象看到的將不是ProxyFactoryBean實例自己,而是一個ProxyFactoryBean實現裏getObject() 方法所建立的對象。 這個方法將建立一個AOP代理,它包裝了一個目標對象。spring
使用ProxyFactoryBean的最重要的好處之一就是建立AOP代理,這意味着通知和切入點也能夠由IoC來管理。這也是實現AOP代理的重要思想。經過代理攔截對方法的調用,並調用相應的處理程序,能夠實現程序邏輯的加強,而不須要改動原有代碼。app
<beans>代理
<bean id="customerService" class="com.bwf.CustomerService">code
</bean>對象
<bean id="aroundAdvice" class="com.bwf.AroundMethod" />get
<bean id="customerServiceProxy"class
class="org.springframework.aop.framework.ProxyFactoryBean">aop
<property name="target" ref="customerService" />map
<property name="interceptorNames">引用
<list>
<value>customerAdvisor</value>
</list>
</property>
</bean>
<bean id="customerAdvisor"
class="org.springframework.aop.support.NameMatchMethodTutorialscutAdvisor">
<property name="mappedName" value="printName" />
<property name="advice" ref="aroundAdvice" />
</bean>
</beans>
該例中,使用ProxyFactoryBean,定義了一個代理,並指向了自定義的customerService,併爲被代理類指定了攔截的方式和攔截後處理方法。
在代碼中要使用customerService實例,只須要以下調用:
CustomerService cust = (CustomerService)appContext.getBean("customerServiceProxy");
而後執行相應方法時,就可以自動執行切面定義的方法。