在Spring 中,最关键的就是Bean ,spring通过IOC容器创建并管理Bean,一个普通的类是怎么样被Spring容器管理,并注册成为一个Bean呢,主要有如下几布
1、实例化Bean,并且对bean的属性的配置进行依赖注入 ,在这一步中,会对类进行实例化,也就是得到一个类的对象,这一步调用的是类的无参构造器,创建出来的对象通过setter方法,注入类属性值,也就是注解中的Autowired.
2、当得到类的实例对象后,spring就开始对这个对象进行一些代理操作来加强这个bean,假如bean实现了Aware接口,那么说明这个类允许其在bean容器中感知自己的属性,执行其实现的相对应的方法
3、继续进行bean的增强操作,如果bean与BeanPostProcessor 关联,调用postProcessBeforeInitialzation方法,在实例化后、初始化前添加自定义的逻辑,也就是AOP
4、如果接口实现了 InitializingBean ,则调用afterPropertiesSet方法执行一些属性设定后的事情
5、调用bean自身的init方法,做一些初始化工作
6、调用BeanPostProcessor 的后置处理方法,postProcessAfterInitialzation完成初始化后工作
经过以上的增强后,bean的初始化就完成, ,这个时候才是成品的bean,将其放入容器中,一般就是ApplicatitionContext
Bean 创建完毕后,就会开始使用,当bean不再使用时,就会执行销毁
如果 Bean 实现了 DisposableBean 接口,则 Spring 会调用 destory() 方法将 Spring 中的 Bean 销毁;
如果在配置文件中通过 destory-method 属性指定了 Bean 的销毁方法,则 Spring 将调用该方法对 Bean 进行销毁。
对于Bean的销毁,那么怎么定义bean什么时候进行销毁呢,这里就涉及到bean的作用域,bean一共有5种作用域.
1:Singleton:在一个spring容器中只会存在唯一的bean实例,当容器关闭时bean被销毁
2:prototype:每次请求都会创建一个新的实例,也就是每次getInstance获得的是不同的bean,当容器关闭时才会被销毁
3:request:每一次HTTP请求都会产生一个新的bean,该bean只在当前HTTP Request有效,也就是服务器响应后则结束
4:Session:在一个HTTP Session中,一个bean定义对应一个实例,仅在基于web的Spring ApplicationContext 中有效,同一用户共享,保存在用户的session中
5: global-session:仅在基于porlet的应用中才有意义
标签:容器,生命周期,销毁,Spring,bean,Bean,实例 From: https://www.cnblogs.com/studyConfig/p/17428014.html