首页 > 其他分享 >Spring中Bean的生命周期

Spring中Bean的生命周期

时间:2023-05-24 13:23:40浏览次数:56  
标签:容器 生命周期 销毁 Spring bean Bean 实例

在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

相关文章

  • Maven+Eclipse+SpringMVC+MyBatis整合
    Maven+Eclipse+SpringMVC+MyBatis整合参考:SpringMVC3.0.5+Spring3.0.5+MyBatis3.0.4全注解实例详解(一):[url]http://www.blogjava.net/bolo/archive/2011/05/23/349655.html[/url]Maven最佳实践:版本管理:[url]http://juvenshun.iteye.com/blog/376422[/......
  • Spring MVC +MyBatis3全注解实例详解
    SpringMVC3.0.5+Spring3.0.5+MyBatis3.0.4全注解实例详解(一):[url]http://www.blogjava.net/bolo/archive/2011/05/23/349655.html[/url]如何配置Eclipse,Maven,Jetty并运行工程.如是使用Tomcat的话,改插件为:[url]http://tomcat.apache.org/maven-plugin......
  • guzz 1.3.0大版本发布,支持Spring事务
    Guzz是一种用来进行快速开发和高性能网站设计的框架,用于替代或者补充hibernate或ibatis的持久化实现,并提供更多的大型系统架构设计支持。guzz的目标是使得大型化网站设计更加简单,团队分工更加明确,框架在使用时更少出问题。主要设计理念:更容易的团队管理和人员分工现代大规模系......
  • 使用JPA+Struts2+Spring 在 google Appengine开发应用
    本文同时发表在我在googleAppengine上的搭建的博客:[url]http://blogfor11lu.appspot.com/articleaction_view.action?article.id=agtibG9nZm9yMTFsdXIPCxIHQXJ0aWNsZRjBtQMM[/url]之前用JDO和Struts2在googleAppengine上试着写了一个简单的blog程序,但我还是希望使用Spring......
  • Appengine部署springMVC3.1
    参考:[url]http://sikeh.iteye.com/blog/364043[/url]获得springMVC的方法:[url]http://panyongzheng.iteye.com/blog/1759912[/url][b]1.mvnarchetype:create-DgroupId=com.pandy-DartifactId=study[/b][b]2.cdstudy[/b]需要做一些另外的事情,然......
  • 使用spring初始化器创建出来的gradle项目,gradle.build.ks文件extra报错的解决方法
    有关讨论:https://github.com/spring-io/initializr/issues/922https://github.com/spring-io/start.spring.io/issues/581springboot生成器:https://start.spring.io/......
  • BeanUtils使用总结
    [color=red][size=x-large]Commons-BeanUtils学习笔记[/size][/color[color=red][b]1、BeanUtils一共分4个包:[/b][/color][b]org.apache.commons.beanutilsorg.apache.commons.beanutils.convertersorg.apache.commons.beanutils.localeorg.apache.commons.beanutils.loc......
  • 自定义注解实现数据序列化时进行数据脱敏(基于springboot默认jackjson)、消息转换器
    消息转换器fastjson与jackjson问题在springboot中使用fastjson的@jsonField无效原因:在springboot默认有json(jackjson)解析工具,所以使用fastjson不会生效解决方案替换默认的解析工具(笔者不推荐,这里根据自己项目决定)fastjson替换默认的jackjson第一种方法bean方法packagecom......
  • springboot~对应sharding-jdbc实现分库分表
    原因当mysql数据库单表大于1千万以后,查询的性能就不能保证了,我们必须考虑分库,分表的方案了,还好,sharding-jdbc可以很优雅的与springboot对接,完成对mysql的分库和分表。依赖整理为了不影响其它小容量的表,所有添加了动态数据源,只对需要分库分表的进行配置即可com.baomidou:dyna......
  • SpringBoot中使用枚举类、switch、常量类(声明并初始化map)实现类策略者模式,接口返回
    场景SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130503707SpringBoot+@Validate+全局异常拦截实现自定义规则参数校验(校验get请求参数不能为空且在指定......