2015-03-31 33 views
0

我使用Spring AOP 4工作,現在,我已經配置這樣我ProxyFactryBean是:如何將許多目標設置爲ProxyFactoryBean?

@Bean 
@Primary 
public ProxyFactoryBean proxyFactoryBean() { 
    ProxyFactoryBean proxyFactoryBean = new ProxyFactoryBean(); 
    proxyFactoryBean.setTarget(new ClientService()); 
    proxyFactoryBean.addAdvice(new LoggingAdvice()); 
    proxyFactoryBean.addAdvice(new DebugInterceptor()); 
    return proxyFactoryBean; 
} 

這工作,但目標只是ClientService對象。

是否可以設置多個目標而不只是一個?如果可能,我想將這些建議設置爲整個軟件包。否則,請設置具體目標,但不止一個。你怎麼能做到這一點 ?在此先感謝

回答

1

通過Spring的AutoProxy-Facility,可以輕鬆地在應用程序上下文中代理與某些條件匹配的所有bean。唉,切入點api在基於java的配置中使用起來有些麻煩;我通常繼承AbstractAutoProxyCreator,所以我可以在java代碼中表達切入點。

舉例來說,我會做一些事情,如:

@Bean 
AbstractAutoProxyCreator autoProxyCreator() { 
    return new AbstractAutoProxyCreator() { 
     @Override 
     protected Object[] getAdvicesAndAdvisorsForBean(Class<?> beanClass, String beanName, TargetSource customTargetSource) { 
      if (BusinessService.class.isAssignableFrom(beanClass)) { 
       return new Object[] {loggingAdvice()}; 
      } else { 
       return DO_NOT_PROXY; 
      } 
     } 
    }; 
} 

@Bean 
LoggingAdvice loggingAdvice() { 
    return new LoggingAdvice(); 
} 

@Bean 
public PersonService personService() { 
    return new PersonService(); 
} 

此代碼是未經測試,因爲我沒有使用Spring(或Maven)在手的IDE,但要點應該工作。

+0

謝謝!我會嘗試 – jscherman 2015-04-01 16:53:35

1

您試圖實現可以通過在面向方面的語言中使用切點來完成。因此,您可以定義點切割以自動將該方面應用於多個目標,即實現相同的界面。查看更多詳細信息here(滾動至9.2.3聲明削減點)。

相關問題