美文网首页
更多DI的知识

更多DI的知识

作者: zlb | 来源:发表于2017-08-04 23:36 被阅读11次

3.3.1 延迟初始化Bean
延迟初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用时才创建及初始化Bean。
配置方式很简单只需在<bean>标签上指定 “lazy-init” 属性值为“true”即可延迟初始化Bean。
Spring容器会在创建容器时提前初始化“singleton”作用域的Bean,“singleton”就是单例的意思即整个容器每个Bean只有一个实例,后边会详细介绍。Spring容器预先初始化Bean通常能帮助我们提前发现配置错误,所以如果没有什么情况建议开启,除非有某个Bean可能需要加载很大资源,而且很可能在整个应用程序生命周期中很可能使用不到,可以设置为延迟初始化。
延迟初始化的Bean通常会在第一次使用时被初始化;或者在被非延迟初始化Bean作为依赖对象注入时在会随着初始化该Bean时被初始化,因为在这时使用了延迟初始化Bean。
容器管理初始化Bean消除了编程实现延迟初始化,完全由容器控制,只需在需要延迟初始化的Bean定义上配置即可,比编程方式更简单,而且是无侵入代码的。
具体配置如下:
<p><code>
<bean id="helloApi"
class="cn.javass.spring.chapter2.helloworld.HelloImpl"
lazy-init="true"/>
</code></p>

3.3.2 使用depends-on
depends-on是指指定Bean初始化及销毁时的顺序,使用depends-on属性指定的Bean要先初始化完毕后才初始化当前Bean,由于只有“singleton”Bean能被Spring管理销毁,所以当指定的Bean都是“singleton”时,使用depends-on属性指定的Bean要在指定的Bean之后销毁。
配置方式如下:
<p><code>
<bean id="helloApi" class="cn.javass.spring.chapter2.helloworld.HelloImpl>
<bean id="decorator"
class="cn.javass.spring.chapter3.bean.HelloApiDecorator"
depends-on="helloApi">
<property name="helloApi"> <ref bean="helloApi"/> </property>
</bean>
</code></p>

“decorator”指定了“depends-on”属性为“helloApi”,所以在“decorator”Bean初始化之前要先初始化“helloApi”,而在销毁“helloApi”之前先要销毁“decorator”,大家注意一下销毁顺序,与文档上的不符。
“depends-on”属性可以指定多个Bean,若指定多个Bean可以用“;”、“,”、空格分割。
那“depends-on”有什么好处呢?主要是给出明确的初始化及销毁顺序,比如要初始化“decorator”时要确保“helloApi”Bean的资源准备好了,否则使用“decorator”时会看不到准备的资源;而在销毁时要先在“decorator”Bean的把对“helloApi”资源的引用释放掉才能销毁“helloApi”,否则可能销毁 “helloApi”时而“decorator”还保持着资源访问,造成资源不能释放或释放错误。

   让我们看个例子吧,在平常开发中我们可能需要访问文件系统,而文件打开、关闭是必须配对的,不能打开后不关闭,从而造成其他程序不能访问该文件。让我们来看具体配置吧:

1)准备测试类:

ResourceBean从配置文件中配置文件位置,然后定义初始化方法init中打开指定的文件,然后获取文件流;最后定义销毁方法destroy用于在应用程序关闭时调用该方法关闭掉文件流。

DependentBean中会注入ResourceBean,并从ResourceBean中获取文件流写入内容;定义初始化方法init用来定义一些初始化操作并向文件中输出文件头信息;最后定义销毁方法用于在关闭应用程序时想文件中输出文件尾信息。

相关文章

  • 更多DI的知识

    3.3.1 延迟初始化Bean延迟初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用时才创建及初...

  • 初识Spring的DI及其基本用法

    作为Spring新手,边学《Spring in Action》边总结相关知识。 什么是DI DI,Dependen...

  • 平凡每一天

    di da di da di da 我的脉搏在跳动 di da di da di da 我的心儿在远方 di da...

  • I Am You(我就是你)

    La di da di da da La di da di da da La di da di da da La ...

  • I am you

    La di da di da da La di da di da da La di da di da da La ...

  • I AM YOU

    La di da di la da La di da di la da La di da di la da La ...

  • kim taylor-《i am you》

    La di da di da da La di da di da da La di da di da da La ...

  • 第二十一天课堂笔记 3月28

    继续介绍磁盘知识: Raid是廉价冗余磁盘阵列(Redundant Array of Inexpensive Di...

  • 创造想法之前,先做一个傻瓜

    “你会交到更多朋友。”“你会创造更多。”“你会放下顾虑。”“你会傻名卓著。”——这就是来自意大利的时尚服装品牌Di...

  • 读圣贤书的知识分子向何处去

    综观封建王朝,对于知识分子的思想控制是DI王的一项重要功课。在没有互联网的过去,DI王通常有四个选择。 ...

网友评论

      本文标题:更多DI的知识

      本文链接:https://www.haomeiwen.com/subject/zppxuttx.html