Spring学习笔记(4)----Bean节点信息配置

系统 1660 0

默认情况下,Spring的Ioc容器启动时会初始化bean,但是我们可以指定Bean节点的lazy-init="true",来延迟初始化bean。这时候,只有第一次获取bean才会初始化bean。如

Xml代码 复制代码
  1. < bean   id = "userBean"   class = "com.szy.spring.implbean.UserBean"   lazy-init = "true"   />   
      <bean id="userBean" class="com.szy.spring.implbean.UserBean" lazy-init="true" />
    

 如果想对所有的bean有应用延迟初始化,可以在跟节点beans设置default-lazy-init="true",如下:

Xml代码 复制代码
  1. < beans   default-lazy-init = "true" .... >   
      <beans default-lazy-init="true"....>
    

 此外,如果我们还想UserBean在实例化是调用初始化方法时,我们可以加入“init-method="init"”属性,其中init为Userbean中的init()方法,与之对应,“destroy-method="destroy"”为销毁属性。

在Spring中我们通过getBean(name)方法获得实例,那么我们每次获取的实例化对象是一个还是多个呢?

我们可以通过“==”进行测试

Java代码 复制代码
  1. ApplicationContext ctx= new  ClassPathXmlApplicationContext( "applicationContext.xml" );      
  2. PersonBean bean1=(PersonBean)ctx.getBean( "userBean" );   
  3. PersonBean bean2=(PersonBean)ctx.getBean( "userBean" );   
  4. System.out.println(bean1==bean2);  
      		ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");   
		PersonBean bean1=(PersonBean)ctx.getBean("userBean");
		PersonBean bean2=(PersonBean)ctx.getBean("userBean");
		System.out.println(bean1==bean2);

    

 运行输出结果为:true

这说明了Bean交给sping容器管理之后,Bean默认情况下是单实例的。

如果我们想每次通过getBean(name)方法获得实例是一个新的实例化对象该怎么办呢?

在配置文件中节点bean有一个属性scope,只要我们配置如下即可:

Xml代码 复制代码
  1. < bean   id = "userBean"   class = "com.szy.spring.implbean.UserBean"   scope = "prototype"   />   
      <bean id="userBean" class="com.szy.spring.implbean.UserBean" scope="prototype" />
    

 在运行测试代码,输出结果为:false

Spring学习笔记(4)----Bean节点信息配置


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论