当在Spring中注入autowired值时

时间:2013-06-05 09:58:36

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

是否有人知道何时将自动装配的文件(如果没有与via构造函数或set方法有区别)的值注入到使用它的类中?

例如,我正在尝试注入值serverProperties。正如我所知,该字段没有得到我尝试使用它时注入的值设置类字段ROOT_DIRECTORY的初始值,其中serverProperties抛出Null指针异常。注射实际发生时?在所有类字段初始化之后?提前致谢。

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

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

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

2 个答案:

答案 0 :(得分:2)

如果您使用的是注释,则可以使用@PostConstruct

答案 1 :(得分:1)

豆是

  1. 创建(使用构造函数,工厂方法等)
  2. 注入
  3. 依赖项(设置了@Autowired属性)
  4. init methods被称为
  5. 在第三步中,您需要设置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"/>