【问题标题】:Give property names/values with @Component使用 @Component 提供属性名称/值
【发布时间】:2013-04-08 11:09:16
【问题描述】:

请处理这个基本问题。

我曾经使用@Autowired 注解,其中可以使用该类的键/值格式为属性(类变量)赋值。

<bean id="class" class="a.b.c.Class" lazy-init="true">
        <property name="var1" value="${var1}" />
</bean>

我将 Class 更改为带有不需要自动装配的组件扫描选项的 @Component。现在如何添加属性变量?

另外,我不想在编写 Junits 时遇到麻烦。

谢谢,

【问题讨论】:

    标签: java spring components autowired


    【解决方案1】:

    如果您正在考虑属性文件中的属性,请查看 @PropertySource@Value 注释。

    @Component
    @PropertySource("classpath:myProps.properties")
    public class MyComponent {
    
        @Value("${some.property}")
        private String valueFromProperty;
    
        // You can also use environment
        @Autowired
        private Environment env;
    
        public void someMethod() {
            String prop = env.getProperty("some.property");
            MyBean bean = new MyBean();
            bean.setProp(prop);
            return bean;
        }
    }
    

    【讨论】:

    • 什么意思?如果你在谈论单元测试,我不喜欢使用 Spring 来解决我的依赖关系,而只是“手工连接”的东西。但是,如果您使用 Spring 测试运行器和正确的上下文配置,它应该可以工作。
    • 抱歉删除评论。我的意思是,我们可以像 Autowired 那样直接注入 Value 注释吗?
    • @Value 应该在创建 bean 时注入,所以我认为答案是肯定的。
    【解决方案2】:

    查看参考中的 Spring 的 @Value 注解 (Chapter 4. IoC container)。

    应该加载属性:

    <beans>
       <context:property-placeholder location="classpath:/com/acme/your.properties"/>
    </beans>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 2013-01-29
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2011-12-08
      相关资源
      最近更新 更多