美文网首页
bean标签的常用属性scope

bean标签的常用属性scope

作者: 打死你的小白兔 | 来源:发表于2018-03-29 10:54 被阅读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();
        }
    

    相关文章

      网友评论

          本文标题:bean标签的常用属性scope

          本文链接:https://www.haomeiwen.com/subject/uiqmcftx.html