目录
一、bean基础配置(id属性与class属性)
(1)id:用来定义bean的名称。
(2)class:用来指定bean的类型,也就是造出来的bean是哪个类的。
二、bean的name属性
功能:用来定义bean的别名,当定义多个别名时,用逗号(,)分号(;)或空格( )分隔
三、bean作用范围scope属性
功能:定义bean的作用范围,可选范围如下:
(1)singleton:单例(默认),即一个类中只有一个实例。
(2)prototype:非单例,即一个类可以有多个实例。
四、bean的实例化
- 实例化bean有三种方式:构造方法,静态工厂和实例工厂
1、构造方法实例化(常用)
(1)环境准备
- 创建一个Maven项目
- pom.xml添加依赖
- resources下添加spring的配置文件applicationContext.xml
(2)准备一个BookDao和BookDaoImpl类
//BookDao类
package com.itheima.dao;
public interface BookDao {
public void save();
}
//BookDaoImpl类
package com.itheima.dao.impl;
import com.itheima.dao.BookDao;
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}
(3)把类配置到Spring容器
(4)编写运行程序的类App
(5)在BookDaoImpl类中添加一个无参构造函数,并打印一句话
public class BookDaoImpl implements BookDao {
//添加一个无参构造函数
public BookDaoImpl() {
System.out.println("book dao constructor is running ....");
}
public void save() {
System.out.println("book dao save ...");
}
}
(6)运行程序,控制台打印构造函数中的输出,说明Spring容器在创建对象的时候也走的是构造函数
2、静态工厂实例化(了解)
2.1、工厂方式创建bean
(1)准备一个OrderDao和OrderDaoImpl类
public interface OrderDao {
public void save();
}
public class OrderDaoImpl implements OrderDao {
public void save() {
System.out.println("order dao save ...");
}
}
(2)创建一个工厂类OrderDaoFactory并提供一个静态方法
(3)在运行类App中,通过工厂获取对象
(4)运行后,可以查看到结果
2.2、静态工厂实例化
(1)在spring的配置文件application.properties中添加配置:
- class:工厂类的类全名
- factory-mehod:具体工厂类中创建对象的方法名
(2)在App运行类中,使用从IoC容器中获取bean的方法进行运行测试
(3)运行后的结果为
3、实例工厂实例化 (了解)
3.1、环境准备
(1)准备一个UserDao和UserDaoImpl类
//UserDao类
public interface UserDao {
public void save();
}
//UserDaoImpl类
public class UserDaoImpl implements UserDao {
public void save() {
System.out.println("user dao save ...");
}
}
(2)创建一个工厂类UserDaoFactory并提供一个普通方法
(3)在App运行类中通过工厂获取对象
(4)运行后的结果为
3.2、实例工厂实例化
(1)在spring的配置文件application.properties中添加配置:
- factory-bean:工厂的实例对象
- factory-method:工厂对象中的具体创建对象的方法名
(2)在App运行类中,使用从IoC容器中获取bean的方法进行运行测试
(3)运行后的结果为
3.3、FactoryBean(实用)
(1)创建一个UserDaoFactoryBean的类,实现FactoryBean接口,重写接口的方法
(2)在Spring的配置文件中进行配置
(3)App运行类不用做任何修改,直接运行
(4)运行后的结果为