Bean的生命周期

发布时间:2026/5/18 0:44:06

Bean的生命周期 实例化属性赋值初始化销毁实例化实例化主要通过反射调用构造方法来创建对象属性赋值属性赋值主要是给Bean的成员变量填充值例如Autowired、Resource、Value。初始化在初始化方面Aware接口BeanPostProcessorInitializingBean和init-methodAware接口是为了让Bean感知容器类的一些信息当Bean实现了某个Aware接口时Spring在初始化的过程中会调用相应的方法把容器的对象注入给Bean例如BeanNameAware可以获取Bean的名称BeanFactoryAware可以获取BeanFactoryBeanClassLoaderAware可以获取类加载器在完成依赖注入后需要执行一些初始化逻辑Spring提供了三种方式PostConstructInitializingBean里面的afterProperties()init-method是XML配置方式的初始化目前最佳的是第一张通过注解的方式而且优先级是1-2-3。那么很多人就会有疑问了这里的初始化究竟在初始化什么建立资源链接如数据库连接加载数据校验配置那有人问为什么不写在构造函数里面因为构造函数是在实例化就执行的而初始阶段用到的依赖在第二阶段才注入BeanPostProcessor在初始化前后对Bean做额外处理相当于Bean的拦截器。分成postProcessBeforeInitialization和postProcessAfterInitialization。例如典型的AOP就是通过postProcessAfterInitialization实现的。在这里面会判断是否存在相应的注解来返回普通的对象还是代理对象。因为需要在Bean创建完成后才能判断。销毁在销毁方面这里是为了释放一些Bean持有的资源和初始化一样也有三种方式PreDestroy实现DisposableBean接口实现里面的destroy方法destroy-method通过xml配置的方式同样优先级也是注解接口配置。在这里补充一点Bean的作用域一共有五种其中只有单例模式下才会被销毁。多例模式下Spring不会管理。作用域说明singleton单例默认所有地方共享prototype多例每次都会创建一共新的request每个http请求一个session每个session一个application每个ServletContext一个整个Web一个Bean总结Spring中的Bean生命周期一共分成实例化、属性赋值、初始化、销毁四个阶段其中实例化是通过反射的方式调用构造方法创建对象属性赋值是给Bean里面的变量填充属性包括Value、Resource、Autowired初始化包括了Aware接口、BeanPostProcessor前置处理、初始化、BeanPostProcessor后置处理四个阶段其中Aware接口是为了告知Bean容器的环境会传入Bean名称、类加载器、BeanFactory工厂初始化是为了执行一些包括建立数据库链接的初始逻辑可以通过PostConstruct、实现InitlizingBean接口、init-method的方式。BeanPostProcessor是为了对Bean进行一些处理AOP中生成动态代理对象就是在BeanPostPricessor中生成的销毁包括了三种方式PreDestory、DisposableBean、destroy-method。优先级也是逐级递减最后bean的作用域复习一下也是五种单例、多利、request(每个http一个、session每个session一个、application每个web应用一个。

相关新闻