Java bean的作用域与生命周期

1.作用域

①singleton  spring中的单例是基于BeanFactory的,在容器中只有一个

    不管是否使用,容器里面都是同一个对象

<bean id="ServiceImpl" class="cn.csdn.service.ServiceImpl" scope="singleton">

②prototype  从此从容器中获取bean,会返回一个新的实例

    一个bean对应多个实例,创建容器的时候并没有实例化,当获取的时候才去创建,并且每次获取的都不一样。

    所以无状态的bean使用单例,有状态的使用原型。

<bean id="test" class="com.foo.Default" scope="prototype"/>

or

<bean id="test" class="com.foo.Default" singleton="false"/> 

③request     每次http请求都会创建新的bean,仅适用于WebApplicationContext

    一个bean对应一个实例,但是每个请求都有各自的bean实例

<bean id="loginAction" class=cn.csdn.LoginAction" scope="request"/>

    并且每次http请求创建的loginAction bean只在当前请求内有效,并且相互之间隔离,一旦请求结束就销毁了。

④session     相同http session共享一个bean,不同的session则是不同bean,仅适用于WebApplicationContext

    同request,一个bean只有一个实例

<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>

   同request,创建的是userPreferences bean

⑤global session  portlet应用,仅适用于WebApplicationContext

   同request,一个bean只有一个实例

<bean id="user" class="com.foo.Preferences "scope="globalSession"/>

 仅仅在portlet应用中才有意义,它被所有构成某个portlet web应用的各种不同的portlet共享。

 

2.生命周期

图片来源https://www.zhihu.com/question/38597960?sort=created



①.实例化;

②.填充属性;

③.BeanNameAware,将Bean的ID传递给setBeanName()方法;

④.BeanFactoryAware,将调用setBeanDactory()方法并把BeanFactory容器实例作为参数传入;

⑤.ApplicationContextAware,调用setApplicationContext()方法,把应用上下文作为参数传入;

⑥.BeanPostProcess,调用postProcessBeforeInitialization方法(对bean进行修改等操作);

⑦.InitializingBean,调用afterPropertiesSet方法,初始化bean;

⑧.BeanPostProcess,调用postProcessAfterInitialization方法(对bean进行修改等操作);

⑨.bean将存活至上下文被销毁

⑩.DispostbleBean,调用destory方法,在Bean实例销毁前执行。

⑪.销毁完成

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值