編集:これは、受け入れられた回答が私にとってうまくいく理由と、他の人にとって何が問題になる可能性があるかについての説明です。
私のfoo-app-servlet.xmlには、次の行があります:
<context:component-scan base-package="com.foo.app" />
以前 spring2 を使用していたとき、すべてのサービス Bean は applicationContext.xml から取得されていましたが、現在は foo-app-servlet.xml に直接取り込まれています。私のプロジェクトでは、サーブレットに独自のオーバーライド セットがあるため、applicationContext オーバーライド ファイルではなく、サーブレット オーバーライド ファイルでオーバーライドする必要があります。
オーバーライドするとき、コンポーネントに名前を付けていない場合、実際には小文字バージョンが使用されるため、OrderService.foo をオーバーライドするには、次のようにします。
orderService.foo=bar
編集を終了
私はSpring 2.5からSpring 3にアップグレードされたプロジェクトに取り組んでいるため、xmlと注釈ベースの構成の両方があります。以前、PropertyOverrideConfigurer を使用してさまざまな環境のプロパティを変更し、大きな成功を収めました。現在、authorize.net を使用するコードに取り組んでおり、開発環境からそれらに何も送信しないようにする必要があります。
これを達成するために、「testMode」プロパティを 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;
}
}
うまくいかなかったいくつかのことを試しました:
com.foo.services.OrderService.testMode=true
OrderService.testMode=true
やりたいことはここでできる?spring 3 には、これを行うための新しい推奨方法がありますか?