Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring3中将PropertyOverrideConfiguler与带注释的类一起使用_Java_Spring_Spring Mvc - Fatal编程技术网

Java 在Spring3中将PropertyOverrideConfiguler与带注释的类一起使用

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

编辑:以下是一些解释,说明为什么接受的答案对我有效,以及可能对其他人有什么问题

在我的foo-app-servlet.xml中,我有一行:

<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