Spring—Bean的生命周期

只有四个阶段
  1. 实例化
    Instantiation
  2. 属性赋值
    Populate
  3. 初始化
    Initialization
  4. 销毁
    Destruction
  • 实例化和赋值对于构造方法和setter方法的注入;初始化和销毁是用户自定义扩展的两个阶段。
  • 四个阶段之间穿插着各种扩展点。

主要逻辑都在doCreate()方法中,顺序执行下面三个方法,三个方法分别对应三个阶段。

  • createBeanInstance()—实例化
  • populateBean()—属性赋值
  • initailizeBean()—初始化

至于销毁阶段,是在容器关闭时调用的
ConfigurableApplicationContext#close()

  1. //源码
  2. // 忽略了无关代码
  3. protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args)
  4. throws BeanCreationException {
  5. // Instantiate the bean.
  6. BeanWrapper instanceWrapper = null;
  7. if (instanceWrapper == null) {
  8. // 实例化阶段!
  9. instanceWrapper = createBeanInstance(beanName, mbd, args);
  10. }
  11. // Initialize the bean instance.
  12. Object exposedObject = bean;
  13. try {
  14. // 属性赋值阶段!
  15. populateBean(beanName, mbd, instanceWrapper);
  16. // 初始化阶段!
  17. exposedObject = initializeBean(beanName, exposedObject, mbd);
  18. }
  19. }

常用扩展点

很多、难记

Spring--Bean的生命周期 - 图1
Spring--Bean的生命周期 - 图2

总结
  • 声明周期分为四个阶段和多个扩展。扩展点又可以分为影响多个Bean和影响单个Bean。如下:
    • 四个阶段
      • 实例化
      • 属性赋值
      • 初始化
      • 销毁

多个扩展点

  • 影响多个Bean
    • BeanPostProcessor
    • InstantiationAwareBeanPostProcessor
  • 影响单个Bean
    • Aware
      • Aware Group1
        • BeanNameAware
        • BeanClassLoaderAware
        • BeanFactoryAware
      • Aware Group2
        • EnvironmentAware
        • EmbeddedValueResolverAware
        • ApplicationContextAware(ResourceLoaderAware
          ApplicationEventPublisherAware\MessageSourceAware)
    • 生命周期
      • InitializingBean
      • DisposableBean

Spring--Bean的生命周期 - 图3

  1. 实例化Bean

    对于BeanFactory容器,请求一个未初始化bean或需要注入另一个未初始化的依赖时,容器就会调用createBean进行初始化。 对于ApplicationContext容器,启动后,实例化所有的bean。 容器通过获取BeanDefinition对象中的信息进行实例化。这一步是简单的实例化,并未进行依赖注入。 实例化对象被包装在BeanWrapper对象中,BeanWrapper提供了设置对象属性的接口,从而避免了使用反射

  2. 设置属性值(依赖注入)

    实例化后的对象被封装在BeanWrapper对象中,此时对象仍是一个原生的状态,并没有进行依赖注入。 紧接着,spring根据BeanDefinition中的信息进行依赖注入。 并通过BeanWrapper提供的设置属性的接口完成依赖注入。

  3. 注入Aware接口

    接着,Spring会检测对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给Bean。

  4. BeanPostProcessor

    经过上述几个步骤后,bean对象已经被正确构造,但如果想对象被使用前在进行一些自定义的处理,就可通过BeanPostProcessor接口实现。 该接口提供了两个函数

  • postProcessBeforeInitialzation( Object bean, String beanName )
    当前正在初始化的bean对象会被传递进来,我们就可对这个bean做任何处理。这个函数会先于InitialzationBean执行,因此称为前置处理。
  • postProcessAfterInitialzation( Object bean, String beanName )
    当前正在初始化的bean对象会被传递进来,我们就可对这个bean作任何处理。这个函数就会在InitialzationBean完成后执行,因此称为后置处理。
  1. InitializingBean与init-method

    当BeanPostProcessor的前置处理完成后就会进入本阶段。InitializingBean接口只有一个函数: afterPropertiesSet() 这一阶段也可在bean正式构造完成前增加我们自定义的逻辑,但它与前置处理不同,由于该函数并不会吧当前bean对象传进来,因此在这一步没办法处理对象本身,只能增加一些额外的逻辑。若要使用它,我们需要让bean实现该接口,并把要增加的逻辑卸载该函数中。然后Spring会在前置处理完成后检测当前bean是否实现了该接口,并执行afterPropertiesSet函数。 当然,Spring为降低对客户代码的侵入性,给bean的配置提供了init-method属性,该属性指定了在这一阶段需要执行的函数名。Spring便会在初始化阶段执行我们设置的函数。init-method本质仍然使用了InitializingBean接口。

  2. DisposableBean和destroy-method

    和init-method一样,通过给destroy-method指定函数,就可以在bean销毁前执行指定的逻辑。

%23%23%23%23%23%20%E5%8F%AA%E6%9C%89%E5%9B%9B%E4%B8%AA%E9%98%B6%E6%AE%B5%0A1.%20%E5%AE%9E%E4%BE%8B%E5%8C%96%0AInstantiation%0A2.%20%E5%B1%9E%E6%80%A7%E8%B5%8B%E5%80%BC%0APopulate%0A3.%20%E5%88%9D%E5%A7%8B%E5%8C%96%0AInitialization%0A4.%20%E9%94%80%E6%AF%81%0ADestruction%0A%0A-%20%E5%AE%9E%E4%BE%8B%E5%8C%96%E5%92%8C%E8%B5%8B%E5%80%BC%E5%AF%B9%E4%BA%8E%E6%9E%84%E9%80%A0%E6%96%B9%E6%B3%95%E5%92%8Csetter%E6%96%B9%E6%B3%95%E7%9A%84%E6%B3%A8%E5%85%A5%EF%BC%9B%E5%88%9D%E5%A7%8B%E5%8C%96%E5%92%8C%E9%94%80%E6%AF%81%E6%98%AF%E7%94%A8%E6%88%B7%E8%87%AA%E5%AE%9A%E4%B9%89%E6%89%A9%E5%B1%95%E7%9A%84%E4%B8%A4%E4%B8%AA%E9%98%B6%E6%AE%B5%E3%80%82%0A-%20%E5%9B%9B%E4%B8%AA%E9%98%B6%E6%AE%B5%E4%B9%8B%E9%97%B4%E7%A9%BF%E6%8F%92%E7%9D%80%E5%90%84%E7%A7%8D%E6%89%A9%E5%B1%95%E7%82%B9%E3%80%82%0A%0A%E4%B8%BB%E8%A6%81%E9%80%BB%E8%BE%91%E9%83%BD%E5%9C%A8doCreate()%E6%96%B9%E6%B3%95%E4%B8%AD%EF%BC%8C%E9%A1%BA%E5%BA%8F%E6%89%A7%E8%A1%8C%E4%B8%8B%E9%9D%A2%E4%B8%89%E4%B8%AA%E6%96%B9%E6%B3%95%EF%BC%8C%E4%B8%89%E4%B8%AA%E6%96%B9%E6%B3%95%E5%88%86%E5%88%AB%E5%AF%B9%E5%BA%94%E4%B8%89%E4%B8%AA%E9%98%B6%E6%AE%B5%E3%80%82%0A%0A-%20%20createBeanInstance()—%E5%AE%9E%E4%BE%8B%E5%8C%96%0A-%20%20populateBean()—%E5%B1%9E%E6%80%A7%E8%B5%8B%E5%80%BC%0A-%20%20initailizeBean()—%E5%88%9D%E5%A7%8B%E5%8C%96%0A%0A%E8%87%B3%E4%BA%8E%E9%94%80%E6%AF%81%E9%98%B6%E6%AE%B5%EF%BC%8C%E6%98%AF%E5%9C%A8%E5%AE%B9%E5%99%A8%E5%85%B3%E9%97%AD%E6%97%B6%E8%B0%83%E7%94%A8%E7%9A%84%0AConfigurableApplicationContext%23close()%0A%0A%60%60%60java%0A%2F%2F%E6%BA%90%E7%A0%81%0A%2F%2F%20%E5%BF%BD%E7%95%A5%E4%BA%86%E6%97%A0%E5%85%B3%E4%BB%A3%E7%A0%81%0Aprotected%20Object%20doCreateBean(final%20String%20beanName%2C%20final%20RootBeanDefinition%20mbd%2C%20final%20%40Nullable%20Object%5B%5D%20args)%0A%20%20%20%20%20%20throws%20BeanCreationException%20%7B%0A%0A%20%20%20%2F%2F%20Instantiate%20the%20bean.%0A%20%20%20BeanWrapper%20instanceWrapper%20%3D%20null%3B%0A%20%20%20if%20(instanceWrapper%20%3D%3D%20null)%20%7B%0A%20%20%20%20%20%20%20%2F%2F%20%E5%AE%9E%E4%BE%8B%E5%8C%96%E9%98%B6%E6%AE%B5%EF%BC%81%0A%20%20%20%20%20%20instanceWrapper%20%3D%20createBeanInstance(beanName%2C%20mbd%2C%20args)%3B%0A%20%20%20%7D%0A%0A%20%20%20%2F%2F%20Initialize%20the%20bean%20instance.%0A%20%20%20Object%20exposedObject%20%3D%20bean%3B%0A%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%2F%2F%20%E5%B1%9E%E6%80%A7%E8%B5%8B%E5%80%BC%E9%98%B6%E6%AE%B5%EF%BC%81%0A%20%20%20%20%20%20populateBean(beanName%2C%20mbd%2C%20instanceWrapper)%3B%0A%20%20%20%20%20%20%20%2F%2F%20%E5%88%9D%E5%A7%8B%E5%8C%96%E9%98%B6%E6%AE%B5%EF%BC%81%0A%20%20%20%20%20%20exposedObject%20%3D%20initializeBean(beanName%2C%20exposedObject%2C%20mbd)%3B%0A%20%20%20%7D%0A%20%20%20%7D%0A%60%60%60%0A%0A%23%23%23%23%23%20%E5%B8%B8%E7%94%A8%E6%89%A9%E5%B1%95%E7%82%B9%0A%3E%20%E5%BE%88%E5%A4%9A%E3%80%81%E9%9A%BE%E8%AE%B0%0A%0A%0A!%5Bb8e36c7551518cfa7ce654b99987b6f8.png%5D(en-resource%3A%2F%2Fdatabase%2F1391%3A1)%0A%0A%0A!%5B0326d1adf92546a32632e76d735fb609.png%5D(en-resource%3A%2F%2Fdatabase%2F1393%3A1)%0A%0A%23%23%23%23%23%20%E6%80%BB%E7%BB%93%0A%0A-%20%E5%A3%B0%E6%98%8E%E5%91%A8%E6%9C%9F%E5%88%86%E4%B8%BA%E5%9B%9B%E4%B8%AA%E9%98%B6%E6%AE%B5%E5%92%8C%E5%A4%9A%E4%B8%AA%E6%89%A9%E5%B1%95%E3%80%82%E6%89%A9%E5%B1%95%E7%82%B9%E5%8F%88%E5%8F%AF%E4%BB%A5%E5%88%86%E4%B8%BA%E5%BD%B1%E5%93%8D%E5%A4%9A%E4%B8%AABean%E5%92%8C%E5%BD%B1%E5%93%8D%E5%8D%95%E4%B8%AABean%E3%80%82%E5%A6%82%E4%B8%8B%EF%BC%9A%0A%20%20%20%20-%20%E5%9B%9B%E4%B8%AA%E9%98%B6%E6%AE%B5%0A%20%20%20%20%20%20%20%20-%20%E5%AE%9E%E4%BE%8B%E5%8C%96%0A%20%20%20%20%20%20%20%20-%20%E5%B1%9E%E6%80%A7%E8%B5%8B%E5%80%BC%0A%20%20%20%20%20%20%20%20-%20%E5%88%9D%E5%A7%8B%E5%8C%96%0A%20%20%20%20%20%20%20%20-%20%E9%94%80%E6%AF%81%0A%20%20%20%20%20%20%0A%E5%A4%9A%E4%B8%AA%E6%89%A9%E5%B1%95%E7%82%B9%0A-%20%E5%BD%B1%E5%93%8D%E5%A4%9A%E4%B8%AABean%0A%0A%20%20%20%20-%20BeanPostProcessor%0A%20%20%20%20-%20InstantiationAwareBeanPostProcessor%0A-%20%E5%BD%B1%E5%93%8D%E5%8D%95%E4%B8%AABean%0A%0A%20%20%20%20-%20Aware%0A%20%20%20%20%20%20%20%20-%20Aware%20Group1%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20BeanNameAware%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20BeanClassLoaderAware%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20BeanFactoryAware%0A%20%20%20%20%20%20%20%20-%20Aware%20Group2%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20EnvironmentAware%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20EmbeddedValueResolverAware%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20ApplicationContextAware(ResourceLoaderAware%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20ApplicationEventPublisherAware%5CMessageSourceAware)%0A%20%20%20%20-%20%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%0A%20%20%20%20%20%20%20%20-%20InitializingBean%0A%20%20%20%20%20%20%20%20-%20DisposableBean%0A%20%20%20%20%20%20%20%20%0A—-%0A!%5Bf0c2bb0e8d510f3c590ac5c2ddacb324.png%5D(en-resource%3A%2F%2Fdatabase%2F1395%3A1)%0A%0A1.%20%E5%AE%9E%E4%BE%8B%E5%8C%96Bean%0A%0A%3E%20%E5%AF%B9%E4%BA%8EBeanFactory%E5%AE%B9%E5%99%A8%EF%BC%8C%E8%AF%B7%E6%B1%82%E4%B8%80%E4%B8%AA%E6%9C%AA%E5%88%9D%E5%A7%8B%E5%8C%96bean%E6%88%96%E9%9C%80%E8%A6%81%E6%B3%A8%E5%85%A5%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%9C%AA%E5%88%9D%E5%A7%8B%E5%8C%96%E7%9A%84%E4%BE%9D%E8%B5%96%E6%97%B6%EF%BC%8C%E5%AE%B9%E5%99%A8%E5%B0%B1%E4%BC%9A%E8%B0%83%E7%94%A8createBean%E8%BF%9B%E8%A1%8C%E5%88%9D%E5%A7%8B%E5%8C%96%E3%80%82%0A%3E%20%E5%AF%B9%E4%BA%8EApplicationContext%E5%AE%B9%E5%99%A8%EF%BC%8C%E5%90%AF%E5%8A%A8%E5%90%8E%EF%BC%8C%E5%AE%9E%E4%BE%8B%E5%8C%96%E6%89%80%E6%9C%89%E7%9A%84bean%E3%80%82%0A%3E%20%E5%AE%B9%E5%99%A8%E9%80%9A%E8%BF%87%E8%8E%B7%E5%8F%96BeanDefinition%E5%AF%B9%E8%B1%A1%E4%B8%AD%E7%9A%84%E4%BF%A1%E6%81%AF%E8%BF%9B%E8%A1%8C%E5%AE%9E%E4%BE%8B%E5%8C%96%E3%80%82%E8%BF%99%E4%B8%80%E6%AD%A5%E6%98%AF%E7%AE%80%E5%8D%95%E7%9A%84%E5%AE%9E%E4%BE%8B%E5%8C%96%EF%BC%8C%E5%B9%B6%E6%9C%AA%E8%BF%9B%E8%A1%8C%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5%E3%80%82%0A%3E%20%E5%AE%9E%E4%BE%8B%E5%8C%96%E5%AF%B9%E8%B1%A1%E8%A2%AB%E5%8C%85%E8%A3%85%E5%9C%A8BeanWrapper%E5%AF%B9%E8%B1%A1%E4%B8%AD%EF%BC%8CBeanWrapper%E6%8F%90%E4%BE%9B%E4%BA%86%E8%AE%BE%E7%BD%AE%E5%AF%B9%E8%B1%A1%E5%B1%9E%E6%80%A7%E7%9A%84%E6%8E%A5%E5%8F%A3%EF%BC%8C%E4%BB%8E%E8%80%8C%E9%81%BF%E5%85%8D%E4%BA%86%E4%BD%BF%E7%94%A8%E5%8F%8D%E5%B0%84%E6%9C%BA%E5%88%B6%E8%AE%BE%E7%BD%AE%E5%B1%9E%E6%80%A7%E3%80%82%0A%0A2.%20%E8%AE%BE%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%80%BC%EF%BC%88%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5%EF%BC%89%0A%0A%3E%20%E5%AE%9E%E4%BE%8B%E5%8C%96%E5%90%8E%E7%9A%84%E5%AF%B9%E8%B1%A1%E8%A2%AB%E5%B0%81%E8%A3%85%E5%9C%A8BeanWrapper%E5%AF%B9%E8%B1%A1%E4%B8%AD%EF%BC%8C%E6%AD%A4%E6%97%B6%E5%AF%B9%E8%B1%A1%E4%BB%8D%E6%98%AF%E4%B8%80%E4%B8%AA%E5%8E%9F%E7%94%9F%E7%9A%84%E7%8A%B6%E6%80%81%EF%BC%8C%E5%B9%B6%E6%B2%A1%E6%9C%89%E8%BF%9B%E8%A1%8C%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5%E3%80%82%0A%3E%20%E7%B4%A7%E6%8E%A5%E7%9D%80%EF%BC%8Cspring%E6%A0%B9%E6%8D%AEBeanDefinition%E4%B8%AD%E7%9A%84%E4%BF%A1%E6%81%AF%E8%BF%9B%E8%A1%8C%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5%E3%80%82%0A%3E%20%E5%B9%B6%E9%80%9A%E8%BF%87BeanWrapper%E6%8F%90%E4%BE%9B%E7%9A%84%E8%AE%BE%E7%BD%AE%E5%B1%9E%E6%80%A7%E7%9A%84%E6%8E%A5%E5%8F%A3%E5%AE%8C%E6%88%90%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5%E3%80%82%0A%0A3.%20%E6%B3%A8%E5%85%A5Aware%E6%8E%A5%E5%8F%A3%0A%3E%20%E6%8E%A5%E7%9D%80%EF%BC%8CSpring%E4%BC%9A%E6%A3%80%E6%B5%8B%E5%AF%B9%E8%B1%A1%E6%98%AF%E5%90%A6%E5%AE%9E%E7%8E%B0%E4%BA%86xxxAware%E6%8E%A5%E5%8F%A3%EF%BC%8C%E5%B9%B6%E5%B0%86%E7%9B%B8%E5%85%B3%E7%9A%84xxxAware%E5%AE%9E%E4%BE%8B%E6%B3%A8%E5%85%A5%E7%BB%99Bean%E3%80%82%0A%0A4.%20BeanPostProcessor%0A%3E%20%E7%BB%8F%E8%BF%87%E4%B8%8A%E8%BF%B0%E5%87%A0%E4%B8%AA%E6%AD%A5%E9%AA%A4%E5%90%8E%EF%BC%8Cbean%E5%AF%B9%E8%B1%A1%E5%B7%B2%E7%BB%8F%E8%A2%AB%E6%AD%A3%E7%A1%AE%E6%9E%84%E9%80%A0%EF%BC%8C%E4%BD%86%E5%A6%82%E6%9E%9C%E6%83%B3%E5%AF%B9%E8%B1%A1%E8%A2%AB%E4%BD%BF%E7%94%A8%E5%89%8D%E5%9C%A8%E8%BF%9B%E8%A1%8C%E4%B8%80%E4%BA%9B%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E5%A4%84%E7%90%86%EF%BC%8C%E5%B0%B1%E5%8F%AF%E9%80%9A%E8%BF%87BeanPostProcessor%E6%8E%A5%E5%8F%A3%E5%AE%9E%E7%8E%B0%E3%80%82%0A%3E%20%E8%AF%A5%E6%8E%A5%E5%8F%A3%E6%8F%90%E4%BE%9B%E4%BA%86%E4%B8%A4%E4%B8%AA%E5%87%BD%E6%95%B0%0A-%20postProcessBeforeInitialzation(%20Object%20bean%2C%20String%20beanName%20)%0A%E5%BD%93%E5%89%8D%E6%AD%A3%E5%9C%A8%E5%88%9D%E5%A7%8B%E5%8C%96%E7%9A%84bean%E5%AF%B9%E8%B1%A1%E4%BC%9A%E8%A2%AB%E4%BC%A0%E9%80%92%E8%BF%9B%E6%9D%A5%EF%BC%8C%E6%88%91%E4%BB%AC%E5%B0%B1%E5%8F%AF%E5%AF%B9%E8%BF%99%E4%B8%AAbean%E5%81%9A%E4%BB%BB%E4%BD%95%E5%A4%84%E7%90%86%E3%80%82%E8%BF%99%E4%B8%AA%E5%87%BD%E6%95%B0%E4%BC%9A%E5%85%88%E4%BA%8EInitialzationBean%E6%89%A7%E8%A1%8C%EF%BC%8C%E5%9B%A0%E6%AD%A4%E7%A7%B0%E4%B8%BA%E5%89%8D%E7%BD%AE%E5%A4%84%E7%90%86%E3%80%82%0A-%20postProcessAfterInitialzation(%20Object%20bean%2C%20String%20beanName%20)%0A%E5%BD%93%E5%89%8D%E6%AD%A3%E5%9C%A8%E5%88%9D%E5%A7%8B%E5%8C%96%E7%9A%84bean%E5%AF%B9%E8%B1%A1%E4%BC%9A%E8%A2%AB%E4%BC%A0%E9%80%92%E8%BF%9B%E6%9D%A5%EF%BC%8C%E6%88%91%E4%BB%AC%E5%B0%B1%E5%8F%AF%E5%AF%B9%E8%BF%99%E4%B8%AAbean%E4%BD%9C%E4%BB%BB%E4%BD%95%E5%A4%84%E7%90%86%E3%80%82%E8%BF%99%E4%B8%AA%E5%87%BD%E6%95%B0%E5%B0%B1%E4%BC%9A%E5%9C%A8InitialzationBean%E5%AE%8C%E6%88%90%E5%90%8E%E6%89%A7%E8%A1%8C%EF%BC%8C%E5%9B%A0%E6%AD%A4%E7%A7%B0%E4%B8%BA%E5%90%8E%E7%BD%AE%E5%A4%84%E7%90%86%E3%80%82%0A%0A5.%20InitializingBean%E4%B8%8Einit-method%0A%0A%3E%20%E5%BD%93BeanPostProcessor%E7%9A%84%E5%89%8D%E7%BD%AE%E5%A4%84%E7%90%86%E5%AE%8C%E6%88%90%E5%90%8E%E5%B0%B1%E4%BC%9A%E8%BF%9B%E5%85%A5%E6%9C%AC%E9%98%B6%E6%AE%B5%E3%80%82InitializingBean%E6%8E%A5%E5%8F%A3%E5%8F%AA%E6%9C%89%E4%B8%80%E4%B8%AA%E5%87%BD%E6%95%B0%EF%BC%9A%0A%3E%20afterPropertiesSet()%0A%3E%20%E8%BF%99%E4%B8%80%E9%98%B6%E6%AE%B5%E4%B9%9F%E5%8F%AF%E5%9C%A8bean%E6%AD%A3%E5%BC%8F%E6%9E%84%E9%80%A0%E5%AE%8C%E6%88%90%E5%89%8D%E5%A2%9E%E5%8A%A0%E6%88%91%E4%BB%AC%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E9%80%BB%E8%BE%91%EF%BC%8C%E4%BD%86%E5%AE%83%E4%B8%8E%E5%89%8D%E7%BD%AE%E5%A4%84%E7%90%86%E4%B8%8D%E5%90%8C%EF%BC%8C%E7%94%B1%E4%BA%8E%E8%AF%A5%E5%87%BD%E6%95%B0%E5%B9%B6%E4%B8%8D%E4%BC%9A%E5%90%A7%E5%BD%93%E5%89%8Dbean%E5%AF%B9%E8%B1%A1%E4%BC%A0%E8%BF%9B%E6%9D%A5%EF%BC%8C%E5%9B%A0%E6%AD%A4%E5%9C%A8%E8%BF%99%E4%B8%80%E6%AD%A5%E6%B2%A1%E5%8A%9E%E6%B3%95%E5%A4%84%E7%90%86%E5%AF%B9%E8%B1%A1%E6%9C%AC%E8%BA%AB%EF%BC%8C%E5%8F%AA%E8%83%BD%E5%A2%9E%E5%8A%A0%E4%B8%80%E4%BA%9B%E9%A2%9D%E5%A4%96%E7%9A%84%E9%80%BB%E8%BE%91%E3%80%82%E8%8B%A5%E8%A6%81%E4%BD%BF%E7%94%A8%E5%AE%83%EF%BC%8C%E6%88%91%E4%BB%AC%E9%9C%80%E8%A6%81%E8%AE%A9bean%E5%AE%9E%E7%8E%B0%E8%AF%A5%E6%8E%A5%E5%8F%A3%EF%BC%8C%E5%B9%B6%E6%8A%8A%E8%A6%81%E5%A2%9E%E5%8A%A0%E7%9A%84%E9%80%BB%E8%BE%91%E5%8D%B8%E8%BD%BD%E8%AF%A5%E5%87%BD%E6%95%B0%E4%B8%AD%E3%80%82%E7%84%B6%E5%90%8ESpring%E4%BC%9A%E5%9C%A8%E5%89%8D%E7%BD%AE%E5%A4%84%E7%90%86%E5%AE%8C%E6%88%90%E5%90%8E%E6%A3%80%E6%B5%8B%E5%BD%93%E5%89%8Dbean%E6%98%AF%E5%90%A6%E5%AE%9E%E7%8E%B0%E4%BA%86%E8%AF%A5%E6%8E%A5%E5%8F%A3%EF%BC%8C%E5%B9%B6%E6%89%A7%E8%A1%8CafterPropertiesSet%E5%87%BD%E6%95%B0%E3%80%82%0A%3E%20%E5%BD%93%E7%84%B6%EF%BC%8CSpring%E4%B8%BA%E9%99%8D%E4%BD%8E%E5%AF%B9%E5%AE%A2%E6%88%B7%E4%BB%A3%E7%A0%81%E7%9A%84%E4%BE%B5%E5%85%A5%E6%80%A7%EF%BC%8C%E7%BB%99bean%E7%9A%84%E9%85%8D%E7%BD%AE%E6%8F%90%E4%BE%9B%E4%BA%86init-method%E5%B1%9E%E6%80%A7%EF%BC%8C%E8%AF%A5%E5%B1%9E%E6%80%A7%E6%8C%87%E5%AE%9A%E4%BA%86%E5%9C%A8%E8%BF%99%E4%B8%80%E9%98%B6%E6%AE%B5%E9%9C%80%E8%A6%81%E6%89%A7%E8%A1%8C%E7%9A%84%E5%87%BD%E6%95%B0%E5%90%8D%E3%80%82Spring%E4%BE%BF%E4%BC%9A%E5%9C%A8%E5%88%9D%E5%A7%8B%E5%8C%96%E9%98%B6%E6%AE%B5%E6%89%A7%E8%A1%8C%E6%88%91%E4%BB%AC%E8%AE%BE%E7%BD%AE%E7%9A%84%E5%87%BD%E6%95%B0%E3%80%82init-method%E6%9C%AC%E8%B4%A8%E4%BB%8D%E7%84%B6%E4%BD%BF%E7%94%A8%E4%BA%86InitializingBean%E6%8E%A5%E5%8F%A3%E3%80%82%0A6.%20DisposableBean%E5%92%8Cdestroy-method%0A%3E%20%E5%92%8Cinit-method%E4%B8%80%E6%A0%B7%EF%BC%8C%E9%80%9A%E8%BF%87%E7%BB%99destroy-method%E6%8C%87%E5%AE%9A%E5%87%BD%E6%95%B0%EF%BC%8C%E5%B0%B1%E5%8F%AF%E4%BB%A5%E5%9C%A8bean%E9%94%80%E6%AF%81%E5%89%8D%E6%89%A7%E8%A1%8C%E6%8C%87%E5%AE%9A%E7%9A%84%E9%80%BB%E8%BE%91%E3%80%82%0A