1.单例模式(spring默认)
<bean id="user2" class="com.spring.people.User" c:name="1" c:age="99" scope="singleton"/>
此时如果在测试类中这样写
ApplicationContext context = new ClassPathXmlApplicationContext("userbean.xml"); User user = context.getBean("user2", User.class); User user2 = context.getBean("user2", User.class); System.out.println(user==user2);
此时运行将会输出true (user和user2其实是同一个对象)
下图为spring官方文档给出的示意图
2.原型模式 每次从容器中getbean时都会产生新的对象
<bean id="user2" class="com.spring.people.User" c:name="1" c:age="99" scope="prototype"/>
此时运行和上文相同的java代码输出为false
则user2与user地址不相同。为两个对象
下图为Spring官方对原型模式的解释
3.其余 request,session, application 这些只能在web开发中使用
补充:
多线程模式下尽量使用原型模式(prototype)其他情况尽量使用单例模式(singleton)