一、什么是Bean?
Spring Bean是Spring框架在运行时管理的对象,Spring Bean是任何Spring应用程序的基本构建块,我们编写的大多数应用程序逻辑代码都将放在Spring Bean中。
二、Spring Bean的生命周期四个阶段?
实例化 -----> 属性注入 -----> 初始化 -----> 销毁
三、Bean如何实例化?
根据配置文件中Bean的定义,利用Java Reflection反射技术创建Bean的实例。
四、Bean如何注入属性?
主要通过构造函数注入和setter注入。
五、Bean如何初始化?
处理各种Aware接口:
Spring会检测Bean是否实现了xxxAware接口,通过Aware类型的接口,可以让Spring框架为当前Bean注入相应的内容。
如果Bean实现BeanNameAware接口,会调用它实现setBeanName(String beanId)方法,注入Bean的名字;
如果Bean实现BeanClassLoaderAware接口,调用setBeanClassLoader()方法,注入ClassLoader对象的实例;
如果Bean实现BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,注入的是Spring工厂;
如果Bean实现ApplicationContextAware接口,会调用setApplicationContext()方法,注入Spring上下文。
执行BeanPostProcessor前置处理:
如果想对Bean进行一些自定义的前置处理,那么可以让Bean实现BeanPostProcessor接口,将会在该阶段调用postProcessorBeforeInitialization(Object obj,String s)方法。
执行InitializingBean初始化方法:
如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法。
执行init-method自定义初始化方法:
如果Bean在Spring配置文件中配置了init-method属性,则会自动调用其配置的初始化方法。
执行BeanPostProcessor后置处理:
如果这个Bean实现了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj,String s)方法,这个方法是在Bean初始化结束后调用。
完成以上步骤之后,Bean已经被正确创建了,就可以正常使用这个Bean了。
六、Bean如何销毁?
执行DisposableBean销毁Bean:
当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现的destroy方法进行销毁。
执行destroy-method自定义销毁方法:
如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的自定义销毁方法。
七、Spring Bean生命周期流程图