编辑:这里有一些解释为什么接受的答案对我有用,以及对其他人来说可能是什么问题。
在我的 foo-app-servlet.xml 中,我有这一行:
<context:component-scan base-package="com.foo.app" />
之前用spring2的时候,我所有的service beans都来自applicationContext.xml,现在直接在foo-app-servlet.xml中引入。在我的项目中,servlet 有自己的一组覆盖,因此我需要在 servlet 覆盖文件而不是 applicationContext 覆盖文件中进行覆盖。
覆盖时,如果你没有命名你的组件,那么它确实使用了它的小写版本,所以要覆盖 OrderService.foo,你可以这样做:
orderService.foo=bar
结束编辑
我正在开发一个从 spring 2.5 升级到 spring 3 的项目,因此同时具有基于 xml 和注释的配置。我们之前曾使用 PropertyOverrideConfigurer 来更改不同环境中的属性,并取得了巨大成功。我现在正在处理使用 authorize.net 的代码,我需要确保我不会从开发环境向他们发送任何内容。
为了实现这一点,我想用 PropertyOverrideConfigurer 覆盖我的“testMode”属性。这对于通过 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 有新的首选方式吗?