編輯使用PropertyOverrideConfigurer與註解的類:這是爲什麼公認的答案對我的作品一些解釋,可能這可能是其他人的麻煩。在春季3
在我的富-APP-servlet.xml中,我有這樣一行:
<context:component-scan base-package="com.foo.app" />
當我之前使用spring2,我所有的服務組件從applicationContext.xml中來了,但現在他們直接被帶到在foo-app-servlet.xml中。在我的項目上,servlet有自己的覆蓋集合,所以我需要覆蓋servlet覆蓋文件而不是applicationContext覆蓋文件。
覆蓋時,如果你還沒有命名您的組件,然後它確實用它的小寫版本,所以覆蓋OrderService.foo,你這樣做:
orderService.foo=bar
末編輯
我正在從一個項目,從春季2.5升級到春季3,因此有xml和基於註釋的配置。我們以前使用PropertyOverrideConfigurer在不同環境中更改屬性以取得巨大成功。我現在正在研究使用authorize.net的代碼,我需要確保我不會從開發環境向他們發送任何內容。
爲了做到這一點,我想重寫與PropertyOverrideConfigurer我的「測試模式」屬性。這對於通過xml配置的bean非常適用,但我無法弄清楚如何使用註釋配置的類來完成它。
這是我的applicationContext.xml覆蓋片段:
<bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
<property name="location" value="file:${user.home}/override.properties" />
<property name="localOverride" value="true" />
<property name="ignoreResourceNotFound" value="true" />
</bean>
這裏是與物業我想覆蓋類:
@Component
public class OrderService {
private static Log logger = LogFactory.getLog(OrderService.class);
@Autowired @Qualifier("OrderDAO") private OrderDAO orderDao;
@Autowired private SiteManager siteManager;
String authorizenetProperties = "classpath:authorizenet.properties";
private Boolean testMode = false;
public Boolean getTestMode() {
return testMode;
}
public void setTestMode(Boolean testMode) {
this.testMode = testMode;
}
}
我已經試過了沒幾件事」 t工作:
com.foo.services.OrderService.testMode=true
OrderService.testMode=true
是否有可能做我想在這裏做的事情?春天3有一個新的首選方式嗎?
我相信,我嘗試這樣做,得到了一個錯誤,因爲它試圖組件掃描發生之前覆蓋屬性。我很快就會再來一次,讓你知道。我認爲我已經嘗試過這個的原因是,它實際上是我嘗試的第一件事。但是我沒有像上面那樣命名組件。 – samspot 2012-04-24 20:05:43
不要這樣做。我指定一個名字: @Component( 「orderService」) 公共類OrderService {... 並確定這些在我的屬性文件: orderService.authorizenetProperties = 「富」; orderService.var =「bar」; 沒有錯誤,但是在訪問該類時未設置屬性。 – samspot 2012-04-26 16:58:52
好的......我想出了這裏發生了什麼。 Web應用程序servlet xml具有。正因爲如此,它本身並不通過applicationContext.xml來拉取我的依賴關係。所以我需要使用servlet的覆蓋文件,而不是applicationContext。謝謝你的明確答案,如果沒有它,我不會發現它! –
samspot
2012-04-26 17:07:41