Spring中bean的作用域及Spring容器初始化的相关问题

spring中bean的作用域:
        在Spring容器中,bean的作用域范围默认是单例模式的,singleton,单例模式可以由多个线程并发访问,如果

我们想改变bean的作用域范围,将其改变为多例模式,即每次从容器中获取相同的bean时,都是新的bean,而不

是获得两次相同的bean,其内存地址相同,为true。那么在配置文件中设置bean的作用域范围,Spring容器通过

scope="prototype"来将bean的作用域设置为多例模式。如下:
<bean id="userDAO" class="com.aptech.dao.impl.UserDAOImpl" scope="prototype"></bean>

Spring容器初始化相关问题:

        在Spring容器中,默认情况下,容器启动时初始化所有容器中的bean,但是我们可以指定bean节点的lazy-

init="true"来延迟初始化bean,这时只有在获取该bean时,才会初始化bean。如:
<bean id="userDAO" class="com.aptech.dao.impl.UserDAOImpl" lazy-init="true"></bean>
  如果想对所有Spring容器中的bean都应用延迟初始化,可以在根节点<beans/>设置default-lazy-

init="true".如下:
<beans default-lazy-init="true" />

        在Spring中,当bean的作用域范围是默认的单例模式时,bean会在Spring容器启动时就初始化,如果bean的作用域范围是多例模式的,bean的初始化是在调用该bean的实例时,由beanfactory初始化。如果想在容器启动时,延迟单例模式bean的初始化,则应该按照上一点的方法。

 

        如果想在bean被初始化的同时,让bean所对应的类的相应方法执行,比如:调用该类的初始化方法,或者打开某一数据库连接等,应该怎么办呢?在bean节点中为我们提供了init-method属性,该属性用来指定bean初始化时

,同时该bean所对应的类的某一方法同时执行,该属性的值是对应类中的某一方法。如下:<bean id="userDAO"

class="com.aptech.dao.impl.UserDAOImpl" init-method="getConn"></bean>
当然,如果我们想在gaibean销毁时,也同时执行gaibean对应类的某一方法,Spring也提供了一个属性:

destroy-method,该方法将在bean被销毁之前调用,该属性的值也是对应类的某一方法,如:
<bean id="userDAO" class="com.aptech.dao.impl.UserDAOImpl" destroy-method="closeAll"></bean>

        怎样测试bean在容器启动时是否初始化?因为大多数bean的创建都是通过类构造器来实例化的,所以在bean对应的类中的构造函数中输出一句话,之后创建一个Spring容器,看是否输出构造方法中的话,如果输出则证明在

Sping容器启动时bean就初始化了,如果没有输出则……

思考:bean什么时候被销毁呢? 在Spring容器关闭的时候被销毁。
      那怎样关闭Spring容器呢?使用一个抽象类AbstractApplicationContext ,如下:
 AbstractApplicationContext context = new ClassPathXmlApplicationContext

("applicationContext.xml");
 // 关闭Spring容器
 context.close();


转自前辈博客http://blog.csdn.net/z69183787/article/details/8220834

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值