Spring框架中,bean 的作用域有如下五种:
1.单例:每个spring的Ioc容器返回来一个bean实例(框架默认)
2.原型:当每次请求时候都返回来一个bean实例
3.请求:每个http请求返回来一个bean实例
4.会话:每个http会话返回来一个bean实例
5.全局会话:返回全局会话的一个http实例(常应用于多个模块的超大系统)
后三者多用于web开发。
1、声明一个bean
public class Cat implements HelloWorld{
private String name;
private int age;
public Cat(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Cat(){
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("name"+this.name+"----"+"hascode"+this.hashCode());
}
}
2、配置
<bean id="cat" class="bea.Cat">
<property name="name" value="tom"></property>
<property name="age" value="90"></property>
</bean>
3、测试
public class MyTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext context =
new ClassPathXmlApplicationContext("beans.xml");
Cat cat1 =
(Cat) context.getBean("cat");
cat1.say();
Cat cat2 =
(Cat) context.getBean("cat");
cat2.say();
boolean b=cat1.equals(cat2);
System.out.print(b);
}
}
默认采用单例,输出结果如下
nametom----hascode510552429
nametom----hascode510552429
true
hascode值相同且返回true,是同一个对象
修改配置:添加scop标签,把cat作用域设置成原型
<bean id="cat" class="bea.Cat" scope="prototype">
<property name="name" value="tom"></property>
<property name="age" value="90"></property>
</bean>
结果输出:
nametom----hascode510552429
nametom----hascode1657504438
false