在初始化类时使用Spring属性

时间:2018-11-21 14:52:09

标签: java spring

以下内容产生空错误(“ A”为空),但是我不确定为什么。是否在设置属性值之前实例化了bean?

package org.ets.readtogether.queuing;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("Abean")
public class Test {

    @Value("${send.timeout.secs}")
    public Integer A;

    public int B = A * 1000;
}

2 个答案:

答案 0 :(得分:1)

尝试一下:

@Component("Abean")
public class Test {

    @Value("${send.timeout.secs}")
    public Integer A;

    public int B;

    @PostConstruct
    public void init() {
       B = A * 1000;
    }
}

好榜样here

答案 1 :(得分:1)

Spring在实例化对象后添加注入到对象中的所有依赖项。对象实例化在进行Spring进行的任何@Autowired依赖项注入或@Value值分配之前。

由于在对象实例化期间调用了语句public int B = A * 1000;,因此即使在Spring具有注入依赖项的对象之前,类对象的实例化也会失败。

要在弹簧完成所有注入后后为变量B赋值,请以@PostConstruct方法或@AutoWired执行操作构造函数。

   public int B; // remove the assignment here.

   @PostConstruct
   public void postConstruct () {
       this.B = A * 1000;
   }

在实例化对象之后和Spring完成其工作之后,将调用上述方法。