背景
业务中有一个项目还是Spring+Tomcat的结构进行开发部署的,在引入一个功能的时候一位同学使用了如下方式注入一个参数
public class T {
@Value("${open}")
private Boolean enable;
}
结果在发布到测试环境的过程中却出现了 ${open}
不能被解析的错误。
原因
这个错误比较典型,很容易产生明明这个数据有,就是不能注入的错觉,然后看别人各种博客,百思不得其解。细究其原因,还是对Spring的理解不到位。
在我理解中,Spring解决了Bean依赖管理以及Bean生命周期的问题。如果不用Spring,我们需要手动去实现new操作,然后进行注入,以此实现多个类相互引用的目的。
不局限于Bean管理,还有profile环境管理,properties参数管理
为什么Spring能够实现依赖注入?
Spring能够实现注入的前提是Bean被Spring的容器管理了,如果Bean没有被容器管理,那么Spring的依赖注入就是无根之萍,根本就找不到一个合格的Bean可以被用于注入。
同理,在这个错误中也是如此,使用 ${open}
来进行注入,那么就必须将properties文件注入到Spring中去,将properties交付给Spring进行管理。
在这一步很容易将maven编译器的properties文件和注入Spring的properties文件进行混淆,这个是最需要注意的。
如果能理解明白这两层含义,基本上就不会遇到这些问题了。
虽然这里算是一个小坑点,但是随着SpringBoot的深入人心,大家都会使用SpringBoot约定俗成的习惯,后边碰到这种问题的情况就越来越低了
小结
万变不离其宗,Spring的依赖注入首先还是需要Bean被其管理,其次才能实现注入,理解了这里的问题,后边再怎么变化都能解决。