3.1 Bean标签基本配置
用于配置对象交由Spring来创建。
默认情况下它调用类中的无参构造函数,没有无参构造函数则创无法创建成功。
基本属性
id: Bean实例在Spring容器中的唯一标识
class: Bean的全限定名称
3.2 Bean标签范围配置
scope: 指对象的作用范围,取值如下:
取值范围 | 说明 |
singleton | 默认值,单例的 |
prototype | 多例的 |
<bean id="userDao" class="com.dao.impl.UserDaolmpl" scope="singleton"></bean>
<bean id="userDao" class="com.dao.impl.UserDaolmpl" scope="prototype"></bean>
<Bean ID=“唯一的标识” class=“类的全限定名” scope=“单例或多例”>
1. 当scope的取值为singleton时
Bean的生命周期:
对象创建:当应用被加载时,创建容器时,对象被创建了
对象运行:当容器在对象一直活着
对象销毁:当应用卸载,销毁容器时,对象就被销毁了
2. 当scope的取值为prototype时
Bean的实例化时机:当调用getBean()方法实例化Bean
对象创建:当使用对象时,创建新的对象实例化
对象运行:只要对象在使用中就一直存在
对象销毁:当对象长时间不用就会被java垃圾回收站自动回收
3.3 Bean生命周期配置
init-method:指定类中的初始化方法
destroy-method:指定类中的销毁方法
案例:
3.3.1 创建一个接口
public interface UserDao {
public void save();
}
3.3.2 创建一个实现类(UserDaolmpl)
public void init() {
System.out.println("初始化方法....");
}
public void destory() {
System.out.println("销毁方法....");
}
3.3.3 配置Bean(applicationContext.xml)
<bean id="userDao" class="com.dao.impl.UserDaolmpl" init-method="init" destroy-method="destory"></bean>
3.3.4 测试类(UserDaoDemo)
public static void main(String[] args) {
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) app.getBean("userDao");
userDao.save();
app.close();
}
运行结果
UserDaoImp创建....
初始化方法....
com.dao.impl.UserDaolmpl@6f195bc3
销毁方法....
3.4 Bean实例化三种方式
默认无参的构造器实例化
静态工厂方法实例化
//接口
public void save();
//实现接口
public void save() {
System.out.printf("sava running....");
}
//工厂
public class StaticFactory {
public static UserDao getUserDao(){
return new UserDaolmpl();
}
//配置Bean
<bean id="userDao" class="com.facory.StaticFactory" factory-method="getUserDao"></bean>
//实现接口
public static void main(String[] args) {
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao1 = (UserDao) app.getBean("userDao");
use
实例工厂方法实例化
//接口
public void save();
//实现接口
public void save() {
System.out.printf("sava running....");
}
//工厂
public class StaticFactory {
public static UserDao getUserDao(){
return new UserDaolmpl();
}
//配置Bean
<bean id="factory" class="com.facory.DynamicFatory"></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>
//实现接口
public static void main(String[] args) {
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao1 = (UserDao) app.getBean("userDao");
use