Spring 代理

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");

而後執行相應方法時,就可以自動執行切面定義的方法。

相關文章
相關標籤/搜索