一直对springbean的初始化一知半解,研究了一下发现其实很简单。

创建bean对象 – 属性赋值 – 初始化方法调用前的操作 – 初始化方法 – 初始化方法调用后的操作 – …— 销毁前操作 – 销毁方法的调用。

测试

bean类

  1. public class Person implements InitializingBean,DisposableBean {
  2. private String name;
  3. private Integer age=1;
  4. public Person(String name, Integer age) {
  5. this.name = name;
  6. this.age = age;
  7. System.out.println("Person(String name, Integer age) constructor"+this);
  8. }
  9. public Person() {
  10. super();
  11. System.out.println("Person() constructor"+age);
  12. }
  13. public Integer getAge() {
  14. return age;
  15. }
  16. public void setAge(Integer age) {
  17. this.age = age;
  18. }
  19. public String getName() {
  20. return name;
  21. }
  22. public void setName(String name) {
  23. this.name = name;
  24. }
  25. @Override
  26. public String toString() {
  27. return "Person{" +
  28. "name='" + name + '\'' +
  29. ", age=" + age +
  30. '}';
  31. }
  32. // 自定义init方法
  33. public void init(){
  34. System.out.println("-----Person.init()-----"+this);
  35. }
  36. // 自定义销毁方法
  37. public void cleanUp(){
  38. System.out.println("-----Person.cleanUp()-----"+this);
  39. }
  40. // InitializingBean的实现方法
  41. @Override
  42. public void afterPropertiesSet() throws Exception {
  43. System.out.println("-----InitializingBean.afterPropertiesSet()-----"+this);
  44. }
  45. //DisposableBean 的实现方法
  46. @Override
  47. public void destroy() throws Exception {
  48. System.out.println("-----DisposableBean.destroy()-----"+this);
  49. }
  50. //对象创建并赋值之后调用
  51. @PostConstruct
  52. public void init2(){
  53. System.out.println("-----@PostConstruct-----"+this);
  54. }
  55. //容器移除对象之前
  56. @PreDestroy
  57. public void destory2(){
  58. System.out.println("-----@PreDestroy-----"+this);
  59. }
  60. }

配置类:

  1. @Scope("singleton")
  2. @Bean(name="person",initMethod="init",destroyMethod="cleanUp",
  3. autowire= Autowire.BY_NAME)
  4. public Person person01(){
  5. return new Person("lisi", 20);
  6. }

结果:

  1. // 创建并初始化
  2. Person(String name, Integer age) constructorPerson{name='lisi', age=20}
  3. -----@PostConstruct-----Person{name='lisi', age=20}
  4. -----InitializingBean.afterPropertiesSet()-----Person{name='lisi', age=20}
  5. -----Person.init()-----Person{name='lisi', age=20}
  6. //容器将要销毁
  7. -----@PreDestroy-----Person{name='lisi', age=20}
  8. -----DisposableBean.destroy()-----Person{name='lisi', age=20}
  9. -----Person.cleanUp()-----Person{name='lisi', age=20}

参考:

Spring - bean的初始化和销毁几种实现方式详解