【Spring】bean的作用域(scope)

在spring中的bean有如下的几种作用域:
在这里插入图片描述

在此阶段,我们现在只讨论单例模式(singleton模式)和原型模式(prototype模式)。因为其余的四种模式,是在web中应用的,会在springMVC中详细讲解。



一、单例模式(singleton)

所谓的单例模式,就是通过同一个applicationContext对象的getBean()获取多个对象, 其本质上是同一个。也就是说即使你通过同一个applicationContext的getBean()创建了多个对象,其实其底层还是只是创建了一个对象,即,返回的对象的hashCode是相同的。
在这里插入图片描述

配置:

		<bean id="address" class="com.sdpei.pojo.Address" scope="singleton">
            <property name="province" value="山东省"/>
            <property name="county" value="济南市"/>
            <property name="city" value="历城区"/>
        </bean>

测试:

    @Test
    public void getAddress(){
        ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
        Address address1 = (Address) application.getBean("address");
        Address address2 = (Address) application.getBean("address");

        System.out.println(address1.hashCode());
        System.out.println(address2.hashCode());
        System.out.println(address1==address2);
    }

在这里插入图片描述


二、原型模式(prototype)

原型模式刚好和单例模式相反,即使是通过同一个applicationContext对象的getBean()获取对象,那么每次都会创建新的对象,也就是每次创建的对象的hashCode的值都是不同的。
在这里插入图片描述

配置:

        <bean id="address" class="com.sdpei.pojo.Address" scope="prototype">
            <property name="province" value="山东省"/>
            <property name="county" value="济南市"/>
            <property name="city" value="历城区"/>
        </bean>

测试:

    @Test
    public void getAddress(){
        ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
        Address address1 = (Address) application.getBean("address");
        Address address2 = (Address) application.getBean("address");
        
        System.out.println(address1.hashCode());
        System.out.println(address2.hashCode());
        System.out.println(address1==address2);
    }

在这里插入图片描述


版权声明:本文为m0_45067620原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。