一、bean的作用域
在Spring容器中是指其创建的Bean对象
相对于其他Bean对象的请求可见范围,语法格式:
<bean id="" class="" scope="作用域"/>
属性值 | 作用 |
---|---|
singleton(默认值) | 单例, 在Spring IoC容器中仅存在一个Bean实例(默认缺省就是scope) |
prototype | prototype: 多例, 每次从容器中调用Bean时,都返回一个新的实例,每次调用getBean()时,相当于执行 new XxxBean(), 不会在容器启动时创建对象. |
request | Web环境下,对象与request生命周期一致 |
session | Web环境下,对象与session生命周期一致 |
application | Web环境下,对象与application生命周期一致 |
总结:绝大多数情况下,使用单例singleton(默认值),极少数情况使用多例,至于request,session因为jsp技术的淘汰,几乎很少使用。
二、bean的生命周期(了解)
-
初始化
配置一个方法作为生命周期初始化方法,spring会在对象创建之后立刻调用 init-method,对应注解为@PostConstruct
-
销毁
配置一个方法作为生命周期的销毁方法,spring容器在关闭并销毁所有容器中的对象之前调用destory-method,对应注解为@PreDestory
<bean id="" class="" init-method="该类初始化方法名" destroy-method="该类销毁方法名"/>
bean的生命周期: bean从出生–>销毁的整个过程
- 启动Spring容器
- 创建Bean对象 ----> 实际是在调用Bean对象的构造器
- 给Bean添加属性
- 调用Bean对象的初始化init-method
- getBean获取某个bean对象,调用bean对象的某一个方法
- 调用Bean对象的销毁方法destory-method
- Spring容器销毁
三、spring三种对象的创建方式
1、无参构造器实例化(使用最多且最重要)
// 类
public class Cat1 {
public Cat1(){
System.out.println("构建Cat1");
}
}
// createBean.xml
<!--1、构造器实例化(无参构造器),使用最多-->
<bean id="cat1" class="com.sunny.Cat1"/>
2、静态工厂方法创建(了解)
// 类
public class Cat2 {
}
// Cat2工厂
public class Cat2Factory {
public static Cat2 createInstance(){
Cat2 cat2 = new Cat2();
return cat2;
}
}
// createBean.xml
<!--2、静态工厂方法实例化(了解)
以前使用静态工厂方法: Cat2 cat2 = Cat2Factory.createInstance();来创建,
现在只不过把这种方式,设置到配置文件中来了
-->
<bean id="cat2" class="com.sunny.createbean._02_static_factory.Cat2Factory"
factory-method="createInstance"/>
3、实例工厂方法实例化(了解)
// 类
public class Cat3 {
}
// Cat3工厂
public class Cat3Factory {
public Cat3 createInstance(){
Cat3 cat3 = new Cat3();
return cat3;
}
}
// createBean.xml
<!--3、实例工厂方法实例化(了解)
第一个bean是创建实例工厂对象,第二个bean是通过实例工厂对象调用工厂方法创建Cat3的对象
-->
<bean id="cat3Factory" class="com.sunny.createbean._03_instance_factory.Cat3Factory"/>
<bean id="cat3" factory-bean="cat3Factory" factory-method="createInstance"/>