Bean的作用域
默认我们bean的作用域是单例,也就是说每次使用同一个id的对象时,操作的都是同一个对象。
scope="singleton"
这是默认情况下的值,因此我们可写可不写,在新的配置文件中新建一个<bean>
<bean id="car" class="com.figsprite.bean.autowire.Car"
p:brand="大众" p:price="666" scope="singleton"/>
接着再Main.java测试一下,
-
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-scope.xml");
-
Car car = (Car) ctx.getBean("car");
-
Car car2 = (Car) ctx.getBean("car");
-
-
System.out.println(car==car2);
发现结果为true,很显然car与car2是指向同一个对象的引用。在整个
scope="prototype"
我们修改一下scope的值,发现上述代码输出的是false,每次向容器获取Bean时,都会获得一个新对象。
我们之前提过,在默认情况下,即使我们不在Main.java里显示书写获取Car对象,Spring就会为我们创建一个实例,在整个容器的生命周期内只会创建这一个bean,如果我们将scope改为prototype,则容器初始化时不会创建bean实例,而是在每次请求时都创建一个新的bean实例。