【学习笔记】Bean的作用域
官方给出了六个作用域
其中后面四个request、session、application、websocket是在web开发中使用到的,这里不做过多介绍
主要了解的是singleton、prototype
Singleton Scope(单例作用域)
当你定义一个bean,并把它的作用域设为单例,ioc容器只创建该bean所定义的对象的一个实例
它是spring默认的的作用域,也可以显示的定义出来,如下
<bean id="accountService" class="com.something.DefaultAccountService" scope="singleton"/>
下面我们使用一个例子来验证一下,看看同一个bean实例化的对象是不是一个对象
<bean id="user2" class="com.wang.pojo.User" c:name="李四" c:age="20"/>
我们来使用 “==” ,来判断这个bean实例化两次的结果是不是一个对象
public void test02(){
ApplicationContext context = new ClassPathXmlApplicationContext("userBeans.xml");
User user = (User) context.getBean("user2");
User user2 = (User) context.getBean("user2");
System.out.println("是否相等" + (user==user2));
}
结果告诉我们,单例模式下,只会实例化一个对象。
Prototype Scope(原型作用域)
与单例作用域相反,如果一个bean的作用域是原型作用域,那么每一次实例化它,都会产生一个新的对象
使用原型作用域需要手动定义
<bean id="accountService" class="com.something.DefaultAccountService" scope="prototype"/>
例子:
<bean id="user2" class="com.wang.pojo.User" c:name="李四" c:age="20" scope="prototype"/>