【问题标题】:@Value place holder not resolving values in certain spring beans@Value 占位符无法解析某些 spring bean 中的值
【发布时间】:2013-03-18 12:51:09
【问题描述】:

我有一种情况,我想弄清楚为什么会这样。场景是我有一个 A 类,它实现了 Web 服务公开的操作。对于操作的每个请求,都会创建一个新的 A 实例。整个事情都是由 Spring 在内部管理的,我不确定 Web 服务实例化的 A 类究竟是如何的。

现在我有一个类变量,我想在运行时通过

注入它的值

@Value("${someValue}") 字符串一些变量

someValue 被定义为系统属性。但是创建的每个 bean 都有 someVariable 为 NULL。

我在同一个包中用@Configuration 注释的另一个类中尝试了同样的事情,它可以很好地解析变量。

所以,我想通过@Value 注入的能力是否取决于创建bean 的方式,例如@Component、@Configuration-@Bean、XML 定义

【问题讨论】:

    标签: java web-services spring dependency-injection spring-annotations


    【解决方案1】:

    不是真的。实际上,您可以在组件扫描 bean 和 xml 定义 bean 中使用 @Value 注入值。但请注意这一点,这取决于您将 Placeholder 放入哪个 xml 文件,它仅在每个容器中有效。比如你把它放在applicationContext中,那么在xxx-servlet.xml中创建的bean就不能用@Value注入值了。

    【讨论】:

    • 对不起,我不明白你在答案的第二部分所说的话。 “这取决于您将占位符放入哪个 xml 文件,它仅在每个容器中有效。例如,您将其放入 applicationContext,然后在 xxx-servlet.xml 中创建的 bean 无法使用 @Value 注入值”
    • 好的,就是这样,例如你把这些值放在一个属性文件中并且你想使用它,所以你应该在xml配置文件中配置占位符,然后你是哪个xml文件config它可以确定哪个bean可以使用@Value注入值。
    • 我不明白 propertyplaceholder 配置器可以拾取属性 rt。为什么我们需要专门“配置”每个属性?我的意思是我们需要为每个我们喜欢使用占位符的值做一些“配置”,
    • 你误会了我的意思,我的意思是我们把我们要使用的所有值放在一个属性文件中,并使用占位符导入文件,然后我们可以使用所有值,看来你应该检查 Spring参考。
    猜你喜欢
    • 1970-01-01
    • 2016-01-20
    • 2018-04-21
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 2016-07-24
    相关资源
    最近更新 更多