1、单例模式(Spring默认机制) scope="singleton" 单线程使用
<bean id="user3" class="lin.pojo.User" scope="singleton">
<property name="name" value="XX林"/>
<property name="age" value="18"/>
</bean>
@Test
public void test4(){
ApplicationContext context =
new ClassPathXmlApplicationContext("userbean.xml");
User user1 = (User) context.getBean("user3");
User user2 = (User) context.getBean("user3");
System.out.println(user1 == user2);
}
从结果可以得出,虽然拿出来的对象是多个,但是都是被id为user3的这个单例出来的!
2、原型模式 scope="prototype" 多线程可以使用
每次从容器中get的时候,都会产生一个新对象!
<bean id="user3" class="lin.pojo.User" scope="prototype">
<property name="name" value="XX林"/>
<property name="age" value="18"/>
</bean>
@Test
public void test4(){
ApplicationContext context =
new ClassPathXmlApplicationContext("userbean.xml");
User user1 = (User) context.getBean("user3");
User user2 = (User) context.getBean("user3");
System.out.println(user1.hashCode());
System.out.println(user2.hashCode());
System.out.println(user1 == user2);
}
此时遇到了一个问题,user1 不等于 user2 为什么hashCode值相同,而且scope="prototype" 原型模式之后,不应该每次get的时候都会产生新的对象从而hasCode不相同吗?(以后请求大佬之后再回来解决!!!)
3、其余的request、session、application
这些作用域只有在Web开发的情况下才可以用
request:对象在一次请求中创建,创建完这个对象就失效了。
session:session这个对象就一直在session中活着。
application:就是全局都活着。