2013-03-07 75 views
0

只是好奇。春天 - 为什么初始化调用setter方法后调用

  1. 为什么bean初始化是在setter方法之后完成的?我认为初始化最好在setter方法完成之前完成 - 就像在进行验证以确保将值设置为实例成员之前一样好

  2. 为什么beanPostProcessor在具有beforeInitialization方法后会考虑初始化?

回答

1
  1. 从我的理解,制定者等的电话被认为是动作设置bean的初始状态。没有bean集的初始状态,你不能做任何有意义的初始化。试想一下,如果在setter之前完成初始化会发生什么:(假设我们使用setter注入,而不是ctor注入)通过调用默认ctor创建bean,然后调用初始化,然后初始化什么?这个bean只是一个没有正确注入依赖关系的空白对象。如果你可以在这种情况下进行初始化,那么这种初始化可以简单地放在你的ctor中。

  2. 对于BeanPostProcessor,我相信“后”不是指后初始化。在创建bean(即创建后)后,您只需要进行后处理即可。由于通常在两个不同的时间进行这种后期处理,这是在bean初始化之前和之后。因此,这两种方法。

0
  1. 所以初始化可以使用这个bean设置的值。
  2. 因为这是一个处理器。
+0

那么为什么在postProcessor中有一个名为beforeInitialization的方法? beforeInitialization这个词意味着在初始化之前,如果你在它上面添加一个跟踪,这个方法在bean初始化方法 – yapkm01 2013-03-07 02:21:31

+0

@ yapkm01之前被执行了我认为你不清楚后处理器适合bean生命周期的位置,但阿德里安的回答应该有助于明确这一点。 – 2013-03-07 02:50:15

相关问题