【问题标题】:Spring: constructor injection of primitive values (properties) with annotation based configurationSpring:具有基于注释的配置的原始值(属性)的构造函数注入
【发布时间】:2011-01-19 08:23:26
【问题描述】:

我正在尝试在 Spring 3 中使用基于注释的配置来配置一个类,它将原始值作为其构造函数参数:

@Component
class MyBean {
  MyBean(String arg1, String arg2) {
    // ...
  }
}

还有这样的应用程序上下文:

<beans [...]>
  <context:component-scan base-package="com.example" />
  <context:property-override location="/WEB-INF/example.properties" />
</beans>

我正在尝试找到某种方法来指定构造函数参数应取自属性文件。显然,这确实适用于采用常规 bean(例如MyClass(Bean bean1, OtherBean bean2))但只是属性的构造函数?

我还尝试使用 Spring 3 的 @Value 注释和值的 EL 表达式来注释构造函数参数,例如 @Value("#{prop.Prop1}") arg1,但这似乎也不起作用。

【问题讨论】:

    标签: java spring dependency-injection annotations


    【解决方案1】:

    以下代码与&lt;context:property-placeholder .../&gt; 一起工作正常:

    @Component 
    public class MyBean { 
        @Autowired
        public MyBean(@Value("${prop1}") String arg1, @Value("${prop2}") String arg2) { 
            // ... 
        } 
    } 
    

    但是&lt;context:property-override .../&gt;是一个很具体的东西,不适合这里。

    【讨论】:

    • 属性文件有“myBean.prop1=foo”还是只有“prop1=foo”?也就是说,属性是否由 bean 名称限定?
    • 属性文件将具有prop1=foo。如果您需要myBean.prop1=foo,请写@Value("${myBean.prop1}")。这就是&lt;context:property-placeholder .../&gt; 的工作方式。
    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多