Java 在Spring3中将PropertyOverrideConfiguler与带注释的类一起使用
编辑:以下是一些解释,说明为什么接受的答案对我有效,以及可能对其他人有什么问题 在我的foo-app-servlet.xml中,我有一行:Java 在Spring3中将PropertyOverrideConfiguler与带注释的类一起使用,java,spring,spring-mvc,Java,Spring,Spring Mvc,编辑:以下是一些解释,说明为什么接受的答案对我有效,以及可能对其他人有什么问题 在我的foo-app-servlet.xml中,我有一行: <context:component-scan base-package="com.foo.app" /> 结束编辑 我正在处理一个从Spring2.5升级到Spring3的项目,因此它同时具有xml和基于注释的配置。我们以前使用PropertyOverrideConfiguler在不同环境中更改属性,取得了巨大成功。我现在正在编写使用auth
<context:component-scan base-package="com.foo.app" />
结束编辑
我正在处理一个从Spring2.5升级到Spring3的项目,因此它同时具有xml和基于注释的配置。我们以前使用PropertyOverrideConfiguler在不同环境中更改属性,取得了巨大成功。我现在正在编写使用authorize.net的代码,我需要确保我没有从开发环境向他们发送任何东西
为了实现这一点,我想用PropertyOverrideConfiguler覆盖我的“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>
<bean id="SiteProperties" class="com.foo.utilities.SiteProperties">
<property name="serviceUrl" value="http://localhost:8080" />
<property name="authorizationTestMode" value="false" />
</bean>
我尝试了一些无效的方法:
com.foo.services.OrderService.testMode=true
OrderService.testMode=true
有可能在这里做我想做的事吗?spring 3是否有一种新的首选方法来实现这一点?发布此非最佳解决方案: 您可以使用另一个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>
<bean id="SiteProperties" class="com.foo.utilities.SiteProperties">
<property name="serviceUrl" value="http://localhost:8080" />
<property name="authorizationTestMode" value="false" />
</bean>
所以,只需创建一个xml配置的bean,并将其注入到注释配置的bean中
如果有人知道的话,我仍然想知道做这件事的“正确”方法
谢谢 PropertyOverrideConfiguler使用属性文件中的键作为bean name.bean属性。当
@Component
自动扫描配置时,Spring将bean命名为不合格的类名,以小写开头。在您的例子中,OrderService
bean应该命名为OrderService
。因此,以下方法应该有效
orderService.testMode=true
您还可以通过向组件注释传递名称来命名bean,如@Component(“OrderService”)
或@Component(“com.foo.services.OrderService”)
。这些在Spring3.x中都不是新的
希望这能有所帮助我相信我尝试过这一点并得到了一个错误,因为它试图在组件扫描发生之前覆盖属性。我很快会再给你一次机会,让你知道。我认为我已经尝试过这个的原因是,这实际上是我尝试的第一件事。但是,我没有像上面那样给组件命名。也不要这样。我指定了一个名称:@Component(“orderService”)公共类orderService{…并在我的属性文件中定义了它们:orderService.authorizenetProperties=“foo”;orderService.var=“bar”;没有错误,但在访问类时未设置属性。好的……我知道这里发生了什么。web app servlet xml有。因此,它正在提取依赖项本身,而不是通过applicationContext.xml。因此,我需要使用servlet的覆盖文件,而不是applicationContext的覆盖文件。谢谢对于你的明确回答,没有它我是不会发现的!我在原来的帖子中添加了一个解释。再次感谢!
orderService.testMode=true