分为容器行为和对象行为
容器:首先作为IoC容器初始化第一步肯定是解析applicationContext.xml文件,看一下当前xml中我们需要创建哪些对象,为哪些对象注入什么属性。
对象:接着对象实例化,IoC会根据xml文件自动通过反射,来实例化对应的bean,同时基于java的规则,对应的构造方法也会执行。
容器:接着根据前面解析的xml,就知道要为当前创建的对象注入哪些属性。
对象:当对象注入以后,由IoC容器会自动地调用对象的init-method方法,来完成对象的初始化工作。
容器:IoC容器初始化完成
对象:执行业务代码
容器:IoC容器准备销毁
对象:调用destroy-method释放资源
容器:IoC容器销毁完毕
![](https://img2020.cnblogs.com/blog/1367661/202009/1367661-20200915161624999-429527498.jpg)
init-method是在设置完属性,再去执行的特点。可以用init-method调用方法,例如算订单总价。
registerShutdownHook放在了ClassPathXmlApplicationContext实现类中调用方法的时候需要强转。调用这个方法目的是销毁容器。在这个过程中会自动调用在bean中设置的destroy-method
IoC容器要进行销毁,会自动地触发Order类中的destroy方法,在当前的方法中就需要有将正在写入的文件进行保存的操作,并且将这个文件资源进行释放,这样才可以保证不会出错。
![](https://img2020.cnblogs.com/blog/1367661/202009/1367661-20200915161625612-1314628947.png)