配置Spring管理的bean的作用域

<bean id="persionService" class="com.xinyang.services.impl.PersionServiceBean"></bean>
把业务bean交给Spring管理,在客户端只要调用getBean()方法,就可以从容器里获取bean实例
通过getBean()方法产生同一个业务Bean的两个实例,我们通过两个变量引用是否相同用来判断它从Spring容器里面获取的bean是否为一个
PersionService persionService1=(PersionService)ctx.getBean("persionService");
PersionService persionService2=(PersionService)ctx.getBean("persionService");
System.out.println(persionService1==persionService2)

从控制的打印消息中可以看到两个变量所索引用的对象是同一个,或者说 在默认情况下业务Bean交给Spring容器管理之后这个Bean是单实例,
若希望每调用getBean()方法都获取新的实例,可以通过prototype(原型)这个属性来指定。这里牵扯到Bean的作用域,而单例模式指定的作用域就是singleton作用域范围,也就是若没有指定作用域默认的就是singleton作用域
<bean id="persionService" class="com.xinyang.services.impl.PersionServiceBean" scope="prototype"></bean>


.singleton 在每个Spring Ioc容器中一个bean定义只有一个对象实例,默认情况下会在容器启动时或实例容器时初始化bean但可以指定Bean节点的lazy-init="true" 来延迟初始化bean,这时候,只有第一次获取bean才会初始化如:
<bean id="xxx" class="com.xinyang.services.impl.Service.XinyangServicesBean" lazy-init="true"/>如果想对所有的bean都应用延迟初始化,可以在根节点beans设置default-lazy-init="true"/>
若没有配置 lazy-init="default"
注: lazy-init="true"尽可能的不要使用,因为希望在应用启动的时候观察控制台打印的信息对于业务bean完成化,若配置此属性也就只能在运行期发现这个错误,除非完成特殊操作否则尽量少用

.prototype
每次从容器获取bean都是新的对象
.request
.session
.global session



其他
若在业务bean中定义一个初始化方法init() 如:打开数据库连接或打开某些资源 需要Spring容器对这个bean初始化时就需要执行此方法这是通过容器反射技术来进行调用。配置如下:
<bean id="persionService" class="com.xinyang.services.impl.PersionServiceBean" scope="singleton" lazy-init="default" init-method="init" ></bean>


若在业务bean中定义一个销毁方法detory() 如:关闭数据库连接或关闭某些资源 需要Spring容器对这个bean销毁之前先执行销毁方法
配置如下:



注:bean在spring容器中若没有进行人为操作或人为删除它默认的情况下 它一直在spring中,所以只有在Spring容器关闭,而bean才被销毁


这是需要一个AbstractApplicationContext抽象类,而它也被ClassPathXmlApplicationContext所继承,所以我们通过AbstractApplicationContext这个抽象类 来引用bean的实例
AbstractApplicationContext ctx=new ClassPathXmlApplicationContext("spring.xml");
//来正常关闭Spring容器
ctx.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值