bean基础配置(id与class)
<bean id="" class=""/>
-
class属性能不能写接口如
BookDao
的类全名呢?
答案肯定是不行,因为接口是没办法创建对象的。
bean的name属性
bean作用范围scope配置
-
使用bean的
scope
属性可以控制bean的创建是否为单例:-
singleton
默认为单例 -
prototype
为非单例
-
bean实例化
对象已经能交给Spring的IOC容器来创建了,但是容器是如何来创建对象的呢?
就需要研究下bean的实例化过程
,在这块内容中主要解决两部分内容,分别是
-
bean是如何创建的
-
实例化bean的三种方式,
构造方法
,静态工厂
和实例工厂
-
构造方法实例化
步骤5:将构造函数改成private测试
public class BookDaoImpl implements BookDao { private BookDaoImpl() { System.out.println("book dao constructor is running ...."); } public void save() { System.out.println("book dao save ..."); } }
运行程序,能执行成功,说明内部走的依然是构造函数,能访问到类中的私有构造方法,显而易见Spring底层用的是反射
步骤6:构造函数中添加一个参数测试
public class BookDaoImpl implements BookDao { private BookDaoImpl(int i) { System.out.println("book dao constructor is running ...."); } public void save() { System.out.println("book dao save ..."); } }
运行程序,
程序会报错,说明Spring底层使用的是类的无参构造方法。
静态工厂实例化
实例工厂实例化
实例工厂实例化的方式就已经介绍完了,配置的过程还是比较复杂,所以Spring为了简化这种配置方式就提供了一种叫FactoryBean
的方式来简化开发。
FactoryBean的使用
bean的生命周期
步骤1:添加初始化和销毁方法
针对这两个阶段,我们在BooDaoImpl类中分别添加两个方法,==方法名任意==
public class BookDaoImpl implements BookDao { public void save() { System.out.println("book dao save ..."); } //表示bean初始化对应的操作 public void init(){ System.out.println("init..."); } //表示bean销毁前对应的操作 public void destory(){ System.out.println("destory..."); } }
步骤2:配置生命周期
在配置文件添加配置,如下:
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>