3.Spring Bean

来源:互联网 发布:网络校时电话 编辑:程序博客网 时间:2024/06/08 05:59




一.实例化bean 的三种方式:


1.使用类构造器实例化:


<bean name=“xxx" class="xx.xx.xxxBean"/>


这种方式不做多提,用的最多,最方便。



2.使用静态工厂方法实例化:


    <!--//静态工厂方法实例化-->    <bean name="iSpring_3" class="com.zyy.service.impl.ISpring_3BeanFactory"          factory-method="createISpring_3Bean"></bean>


package com.zyy.service;/** * Created by CaMnter on 2014/8/27. */public interface ISpring_3 {    public void message();}


package com.zyy.service.impl;import com.zyy.service.ISpring_3;/** * Created by CaMnter on 2014/8/27. */public class ISpring_3Bean implements ISpring_3 {    public void message() {        System.out.println("*****  使用静态工厂方法实例化  *****");    }}



package com.zyy.service.impl;import com.zyy.service.ISpring_3;/** * Created by CaMnter on 2014/8/20. */public class ISpring_3BeanFactory {    //静态工厂方法实例化    public static ISpring_3 createISpring_3Bean() {        return new ISpring_3Bean();    }}




    @Test    public void test_1() throws Exception {        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");        ISpring_3 iSpring_3 = (ISpring_3) applicationContext.getBean("iSpring_3");        iSpring_3.message();    }









3.使用实例工厂方法实例化:



    <!--//实例化工厂方法实例化-->    <bean name="iSpring_4BeanFactory" class="com.zyy.service.impl.ISpring_4BeanFactory"></bean>    <bean name="iSpring_4" factory-bean="iSpring_4BeanFactory" factory-method="createISpring_4Bean"></bean>


package com.zyy.service;/** * Created by CaMnter on 2014/8/27. */public interface ISpring_4 {    public void message();}


package com.zyy.service.impl;import com.zyy.service.ISpring_4;/** * Created by CaMnter on 2014/8/27. */public class ISpring_4Bean implements ISpring_4 {    public void message() {        System.out.println("*****  使用实例工厂方法实例化  *****");    }}



package com.zyy.service.impl;import com.zyy.service.ISpring_4;/** * Created by CaMnter on 2014/8/20. */public class ISpring_4BeanFactory {    //使用实例工厂方法实例化    public  ISpring_4 createISpring_4Bean() {        return new ISpring_4Bean();    }}



    @Test    public void test_2() throws Exception {        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");        ISpring_4 iSpring_4 = (ISpring_4) applicationContext.getBean("iSpring_4");        iSpring_4.message();    }









二.Bean的作用域


通过设置bean节点下的scope的值:


.singleton

 在每个Spring IoC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动

时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,

这时候,只有第一次获取bean会才初始化bean。如:


 <bean name="xxx" class="xx.xx.xxxBean"lazy-init="true"/>


如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“

如下:


<beans  default-lazy-init="true“...>


.prototype

 每次从容器获取bean都是新的对象。

 

.request

.session

.globalsession




但是不建议设置lazy-init的值为true,因为这样只有才调试的时候才知道bean初始化是否

有问题,后造成后期的麻烦,日过在实例化Spring容器的时候就实例化bean,可以早点发现

问题。




bean的初始化,可以是Spring容器实例的同时初始化,可以是设置lazy后,通过采用

getBean后才能初始化。

但是,bean 的销毁,是在Spring 容器关闭时,就被销毁了。




我们可以:

指定Bean的初始化方法和销毁方法


<bean name="xxx" class="xx.xx.xxxBean" init-method="init"destroy-method="close"/>


这就要求需要在bean中定义一个 init()方法 和 close()方法。当bean创建或销毁时

容器分别自动调用方法。









0 0