【问题标题】:when autowired value injected in Spring在 Spring 中注入自动装配值时
【发布时间】:2013-06-05 09:58:36
【问题描述】:

有谁知道自动装配字段(如果通过构造函数或设置方法没有区别)值何时注入到使用它的类中?

例如,我正在尝试注入值 serverProperties。正如我所发现的,当我尝试使用它时,该字段还没有得到注入的值,它为类字段 ROOT_DIRECTORY 设置了初始值,其中 serverProperties 抛出空指针异常。什么时候注射真正发生?在所有类字段初始化之后?提前致谢。

PS:持有 bean 是一个带注释的控制器。

@Autowired
@Qualifier("serverProperties")
private Properties serverProperties;

private final String ROOT_DIRECTORY = serverProperties.getProperty("root.path");

【问题讨论】:

    标签: spring annotations inversion-of-control code-injection autowired


    【解决方案1】:

    如果你使用注解,你可以使用@PostConstruct

    【讨论】:

      【解决方案2】:

      豆子是

      1. 创建(使用构造函数、工厂方法等)
      2. 依赖注入(您的@Autowired 属性已设置)
      3. init methods 被调用

      在第三步需要设置ROOT_DIRECTORY,而不仅仅是在类体中定义。所以你的代码应该是这样的

      @Autowired
      @Qualifier("serverProperties")
      private Properties serverProperties;
      
      private String ROOT_DIRECTORY;
      
      public void init() {
          ROOT_DIRECTORY = serverProperties.getProperty("root.path");
      }
      

      你的 bean 应该有一个定义的 init 方法,比如

      <bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
      

      【讨论】:

      • 谢谢,我的bean实际上是一个带注释的控制器,这意味着我不能使用init-method="init"。替代方案?
      • 我想我找到了 @PostConstruct public void init() { // ... }
      猜你喜欢
      • 1970-01-01
      • 2011-12-26
      • 2013-05-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      相关资源
      最近更新 更多