bean实例化的四种创建以及bean的生命周期的解读

bean实例化:

bean是如何创建的构造方法

工厂和实现类的方法和该类的无参构造方法执行顺序:工厂>该类无参构造方法>实现类方法

在实现接口类中可以添加该类无参的构造方法,在获取到bean时,运行时会最先运行无参构造方法

1.构造方法实例化:(常用)

1.将该类的构造方法访问权限改成private,运行程序,能执行成功,说明内部走的依然是构造函数,能访问到类中的私有构造方法,显而易见Spring底层用的是反射
2.在构造函数中添加形参,运行程序,程序会报错,说明Spring底层使用的是类的无参构造方法。

2.静态工厂实例化(了解)

1首先先写接口和实现类,创建静态工厂(DaoFactory),并创建静态无参有返回(数据类型为接口类)的方法返回实现的接口实现类(new 接口实现类),
2在spring配置文件中添加bean

<bean id="bean的唯一标识"
	  class="bean的类全名"
	  name="为bean取的别名"
	  factory-method=”创建工厂中的方法“
	  init-method="bean初始化对应的操作"
	  destory-method="bean销毁前对应的操作"
	  scope=bean的作用范围,默认为单例(singleton)和多例(prototype)/>

3.实例工厂(了解)与FactoryBean(常用)

1.实例工厂和静态工厂一样,接口类实现类工厂bean

不同之处在于:
1.实例工厂内的方法不是静态的
2.实例工厂还要比静态方法多加一个bean坐标:

<!--创建实例化工厂对象,对应的是第一行配置-->
<!--调用对象中的方法来创建bean,对应的是第二行配置-->
<bean id="工厂唯一标识名称"  class="工厂的全限定名"/>
<bean id="getBean要获取的名字:"
	  factory-method="创建工厂中的方法"
	  factory-bean="对应上面第一行配置的id名"/>

2.FactoryBean

这里是为了去简化实例工厂添加bean操作的,把上方的第二行配置给写到代码里:
在建造FactoryBean工厂时去继承FactoryBean 后面加尖括号里面写上接口类,
在实现后要生成三个方法

举例:
public class UserDaoFactoryBean implements FactoryBean<UserDao>

代替原始实例工厂中的创建对象的方法:
T getObject() throws Exception(){
	return 接口实现类
}

返回所创建类的Class对象
Class<?> getObjectType(){
	return 接口类
}

设置多例或者单例(true 单例,false 多例)
default boolean isSingleton() {
	return true;
}

bean的生命周期:

实现bean初始化操作和销毁操作

1.bean配置

bean生命周期:bean对象从创建到销毁的整体过程
bean生命周期控制:在bean创建后到销毁前做的事情

这里只讨论bean生命周期控制
在上面介绍了在添加bean时有bean的初始化(创造前)操作
init-method还有destroy-method销毁前的操作
只需要加上这两个属性即可,其他东西不需要动。

2.类配置

简化bean配置直接在接口实现类中继承InitializingBean, DisposableBean,并实现方法

关闭容器:

当我们在执行后再结果中init方法执行了,但是destroy销毁方法没有执行:

因为Spring的IOC容器是运行在JVM中的,运行main方法后,JVM启动,Spring加载配置文件生成IOC容器,从容器获取bean对象,然后调用方法执行,main方法执行完后,JVM退出,这个时候IOC容器中的bean还没来得及销毁就结束了。

所以我们现在需要做的是需要在JVM关闭之前执行destroy销毁方法

ClassPathXmlApplicationContext ctx = new 
    ClassPathXmlApplicationContext("resources资源文件中的Spring配置文件通常都设为application.xml");
   //close()关闭容器:
    ctx.close();
   //注册钩子关闭容器:
    ctx.registerShutdownHook();

两种关闭容器方法的同和不同:

同:两种都能用来关闭容器
不同:
close方法是在调用的时候关闭
registerShutdownHook方法是在JVM退出前调用关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值