bean标签的常用属性scope

2018-03-29  本文已影响0人  打死你的小白兔

五种:

1.singleton:单例模式
singleton(默认值)
在每个Spring IoC容器中一个bean定义只有一个对象实例(共享)。

默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初
始化bean,这时候,只有第一次获取bean会才初始化bean。如:
<bean id="xxx" class="com.xxx.xxx" lazy-init="true"/>

如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“,
2.prototype:原型模式
允许bean可以被多次实例化(使用一次就创建一个实例) . Spring不能对一个prototype bean的
整个生命周期负责.这就意味着清楚prototype作用域的对象并释放任何prototype bean所持有的
昂贵资源都是客户端的责任。
3.request
4.session
5.global session

初始化bean时机

Spring默认在启动时将所有singleton bean提前进行实例化。提前实例化意味着作为初始化的一
部分,ApplicationContext会自动创建并配置所有的singleton bean.通常情况下这是件好事。
因为这样在配置中有任何错误能立即发现。

Lazy-init 为false,spring容器将在启动的时候报错(比较好的一种方式)
Lazy-init 为true,spring容器将在调用该类的时候出错。

如果scope为prototype, Lazy-init将失去作用 

init、destroy
Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean
的两个生命周期方法。

public class HelloWorld {
    public HelloWorld() {
        System.out.println("new instance");
    }

    public void init() {
        System.out.println("init");
    }

    public void destroy() {
        System.out.println("detroy");
    }

    public void hello() {
        System.out.println("哈哈");
    }
}
-----------------------------------------------
<bean id="helloWorld" class="com.hw.entity.HelloWorld"
        init-method="init" destroy-method="destroy" scope="prototype">
</bean>
---------------------------------------------------------
    @Test
    public void test001() {
        ApplicationContext context = new 
                ClassPathXmlApplicationContext("applicationContext.xml");
        
        HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");
        
        helloWorld.hello();
        
        ClassPathXmlApplicationContext applicationContext = 
                (ClassPathXmlApplicationContext)context;
        
        applicationContext.close();
    }
上一篇下一篇

猜你喜欢

热点阅读