Spring @Component类@Value注解属性未注入问题排查
问题根因
手动通过new Scheduler()创建的实例,不属于Spring IoC容器管理的Bean。@Component注解的作用是标记类,让Spring在包扫描阶段自动创建该类的单例实例存入容器,同时对容器管理的实例完成@Value、@Autowired这类标记的依赖注入逻辑。手动new出来的对象完全脱离Spring容器管控,容器不会感知到这个对象的存在,自然不会为其注入build.version配置值,最终读取到的buildVersion属性就是默认值null。
另外你贴的控制器代码中调用了scheduler.update(),但定义的Scheduler类里只有test()方法,属于笔误,调用时注意匹配方法名。
修复方案
不要手动实例化Scheduler类,直接通过依赖注入获取Spring容器中已经初始化完成、属性注入完毕的Scheduler Bean即可。
方式1:字段注入
@RestController public class ApiController { @Autowired private Scheduler scheduler; @GetMapping("/status") public StatusResponse status() { scheduler.test(); // 补充其余业务逻辑,比如组装返回StatusResponse对象 } }
方式2:构造器注入(Spring官方推荐)
单构造器场景下无需额外加@Autowired注解,Spring会自动完成注入:
@RestController public class ApiController { private final Scheduler scheduler; public ApiController(Scheduler scheduler) { this.scheduler = scheduler; } @GetMapping("/status") public StatusResponse status() { scheduler.test(); // 补充其余业务逻辑 } }
内容的提问来源于stack exchange,提问作者Mathias Hillmann
相关产品推荐
相关产品推荐

