1.谈谈你对spring IOC和DI的理解,它们有什么区别?
IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理,简单说,就是创建UserService对象控制权被反转到了Spring框架
DI:Dependency Injection 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件
![48cf90c679d15b06bcf85c0286010e44.png](https://i-blog.csdnimg.cn/blog_migrate/7277f18a383ab279c62e4c0e837cf0f0.jpeg)
面试题: IoC 和 DI的区别?
IoC 控制反转,指将对象的创建权,反转到Spring容器 , DI 依赖注入,指Spring创建对象的过程中,将对象依赖属性通过配置进行注入
2.BeanFactory 接口和 ApplicationContext 接口有什么区别 ?
①ApplicationContext 接口继承BeanFactory接口,Spring核心工厂是BeanFactory ,BeanFactory采取延迟加载,第一次getBean时才会初始化Bean, ApplicationContext是会在加载配置文件时初始化Bean。
②ApplicationContext是对BeanFactory扩展,它可以进行国际化处理、事件传递和bean自动装配以及各种不同应用层的Context实现 开发中基本都在使用ApplicationContext, web项目使用WebApplicationContext ,很少用到BeanFactory
![4a22aff0cc234957d31a68fcfebe8795.png](https://i-blog.csdnimg.cn/blog_migrate/5395e891003c73a93f45bf9f5f7c1df2.jpeg)
3.spring配置bean实例化有哪些方式?
1)使用类构造器实例化(默认无参数)
2)使用静态工厂方法实例化(简单工厂模式)
![5eb9cd79064100d3686a92df7191455a.png](https://i-blog.csdnimg.cn/blog_migrate/12a704c14e6780871488f19c0b1191e7.jpeg)
3)使用实例工厂方法实例化(工厂方法模式)
![41c1d209d33d95bf09b042d860a9e14e.png](https://i-blog.csdnimg.cn/blog_migrate/e793dfce6b378e618ab133f803765c72.jpeg)
4.简单的说一下spring的生命周期?
1)在配置 元素,通过 init-method 指定Bean的初始化方法,通过 destroy-method 指定Bean销毁方法
![51f82730b643dc38205270bcd9c87f51.png](https://i-blog.csdnimg.cn/blog_migrate/86ad540f9cc7dfbdb99c5ee957adc212.jpeg)
需要注意的问题:
* destroy-method 只对 scope="singleton" 有效
* 销毁方法,必须关闭ApplicationContext对象(手动调用),才会被调用
![558a976961a581403ed2aa15e70b57f0.png](https://i-blog.csdnimg.cn/blog_migrate/f4355af9d9373be0e750243772fb7075.jpeg)
2)Bean的完整生命周期 (十一步骤)【了解内容,但是对于spring内部操作理解有一定帮助】
①instantiate bean对象实例化
②populate prop