最近工作中,要在项目里配置sftp的连接池,然后遇到了一些问题,在解决问题的过程中,对spring bean的生命周期的有了进一步的实证和理解。看下这段代码:
这个类是一个加了@Configuration的配置类,作为一个component,spring容器会在启动的时候加载并且对这个类进行实例化->属性赋值->初始化。
首先进行实例化,我们看到断点走到了这个类的构造方法中。然而对于maxTotal这个成员变量,我们通过@Value注解,把100注值给了它,但构造方法中却没有拿到这个值,依然为0。
那么原因就是spring容器最先做的是对这个类进行实例化,这个时候属性赋值还没有开始,所以我们通过@Value,@Autowired注入的属性值都是得不到的。
解决方法
再看下面这段代码
当我们把这些属性值作为构造器参数时,spring容器就会在类实例化时,优先获取这些值。
理论来自实践,并高于实践。如有不足,请批评指正。