在最近的开发中遇到一个问题,使用@Value获取yml文件中配置的属性时始终获取不到值,一开始我以为是没有注入的问题,或者没有写setter方法的问题,后来我发现这些都都写了然后开始百度发现获取不到属性值有这么几个原因
获取不到值的原因
1.没有使用Component注解,也就是没有注入到容器内
2.变量被static修饰
3.在构造器中使用了属性值
问题分析
前两点原因可以否定掉了,我在构造器中使用了这个变量导致的
原因:在这个问题中我忽略了spring Bean的生命周期
-
实例化Bean:在这个阶段,Spring容器创建Bean的实例,调用Bean的构造方法。
-
注入属性:Spring容器会尽力注入配置的属性值,包括使用
@Value
注解注入的值。 -
初始化Bean:在这个阶段,Spring容器执行一些初始化方法。通常,这包括调用
InitializingBean
接口的afterPropertiesSet
方法、执行在Bean上使用@PostConstruct
注解的方法或自定义的初始化方法。
解决问题
知道了问题所在,但是还需要在bean加载的时候获取到属性值怎么办,可以使用InitializingBean来解决,InitializingBean
接口是Spring Framework提供的一个用于初始化Bean的方式之一。它是org.springframework.beans.factory.InitializingBean
接口的一部分。当一个Bean实现InitializingBean
接口时,它必须提供一个afterPropertiesSet
方法,该方法将在Bean的属性设置之后被自动调用。通常,你可以在这个方法中执行一些初始化逻辑,以确保Bean在被容器实例化后处于可用状态。