一、首先我们先来回顾一下Bean对象创建对象的三种方式。

 

第一种创建方式:使用默认构造函数的方式来构建我们的bean对象,这种方式要求我们所实例化的那个实体类中必须要有一个无参构造方法,否则在实例化的时候会报错空指针异常。

关键字:id、class

使用方式:

<bean id="accountService" class="com.ysw.web.service.impl.AccountServiceImpl"></bean>

         在这种方式中,主要是使用默认的bean创建方式,就是只在bean中指定一个唯一id和一个全限定类名class,这种是默认构造方法空参的情况下使用的。

 

第二种创建方式:使用我们普通工厂中的方式来创建对象,简单的来说,就是通过对某个实体类中的某个方法来创建我们的对象,我们只需要调用我们某个类中的某个方法进行实例化即可。

关键字:factory-bean(表示实体类,这里放唯一id对象)、factory-method(方法名)、id、class

使用方式:

<bean id="instanceFactory" class="com.ysw.web.factory.InstanceFactory"></bean>
    <!--factory-bean是唯一的id,factory-method是这个类中的方法-->
    <bean id="accountService" factory-bean="instanceFactory" factory-method="getInstanceFactory"></bean>

 

第三种创建方式:使用我们静态工厂中的静态方法来进行对象的创建。说白了就是某个类中的静态方法的作为创建的对象并存入spring容器中。

关键字:id、class、factory-method(指定的是静态方法)

使用方式:

<!--<bean id="accountService" class="com.ysw.web.factory.StaticFactory" factory-method="getInstanceFactory"></bean>-->

 

二、Bean对象的作用范围以及指定范围的方式

bean的作用取值范围主要分为以下五个:

            singleton 单例(默认)

            prototype 多例

            request 作用于web应用的请求范围

            session 作用于web应用的会话范围

            global-session 作用于集群环境的会话范围(全局会话范围),当不是集群环境是就是session

使用方式演示,主要关键字是:scope

<!--单例-->
    <!--<bean id="accountService" class="com.ysw.web.service.impl.AccountServiceImpl" scope="singleton"></bean>-->
    <!--多例-->
    <!--<bean id="accountService" class="com.ysw.web.service.impl.AccountServiceImpl" scope="prototype"></bean>-->

 

三、bean对象的生命周期(这里以常用的单例、多例对象来进行举例)

单例对象:

       出生:当我们创建容器的时候(配置文件一旦读取完),bean对象就创建了。

       活着:只要容器还在的话,对象就会一直活着

       死亡:当容器销毁的时候,对象就会销毁

       总结:单例对象的生命周期与容器相同

多例对象:

       出生:当我们要使用bean中的对象的时候,Spring框架就会为我们创建这个对象

       活着:对象使用过程中一直活着。

       死亡:当对象长时间没使用并且没有别的对象引用的时候,就由Java垃圾回收机制进行回收。

关键字:init-method(初始化方法)、destory-method(销毁方法)、scope(作用范围)

使用方式:

<bean id="accountService" class="com.ysw.web.service.impl.AccountServiceImpl"
          scope="singleton" init-method="init" destroy-method="destory"></bean>

  <bean id="accountService" class="com.ysw.web.service.impl.AccountServiceImpl"
          scope="prototype" init-method="init" destroy-method="destory"></bean>