乐趣区

关于java:Java面试介绍下Spring-IoC的工作流程

Hi,我是 Mic

一个工作了 4 年的粉丝,在面试的时候遇到一个这样的问题。

“介绍一下 Spring IOC 的工作流程”

他说答复得不是很好,心愿我能帮他梳理一下。

对于这个问题,咱们来看看普通人和高手的答复。

普通人:

嗯。。。。。。。。

高手:

好的,这个问题我会从几个方面来答复。

  • IOC 是什么
  • Bean 的申明形式
  • IOC 的工作流程

IOC 的全称是 Inversion Of Control, 也就是管制反转,它的核心思想是把对象的管理权限交给容器。

应用程序如果须要应用到某个对象实例,间接从 IOC 容器中去获取就行,这样设计的益处是升高了程序外面对象与对象之间的耦合性。

使得程序的整个体系结构变得更加灵便。

Spring 外面很多形式去定义 Bean,比方 XML 外面的 <bean> 标签、@Service、@Component、@Repository、@Configuration 配置类中的 @Bean 注解等等。

Spring 在启动的时候,会去解析这些 Bean 而后保留到 IOC 容器外面。

Spring IOC 的工作流程大抵能够分为两个阶段。

第一个阶段,就是 IOC 容器的初始化

这个阶段次要是依据程序中定义的 XML 或者注解等 Bean 的申明形式

通过解析和加载后生成 BeanDefinition,而后把 BeanDefinition 注册到 IOC 容器。

通过注解或者 xml 申明的 bean 都会解析失去一个 BeanDefinition 实体,实体中蕴含这个 bean 中定义的根本属性。

最初把这个 BeanDefinition 保留到一个 Map 汇合外面,从而实现了 IOC 的初始化。

IoC 容器的作用就是对这些注册的 Bean 的定义信息进行解决和保护,它 IoC 容器管制反转的外围。

第二个阶段,实现 Bean 初始化及依赖注入

而后进入到第二个阶段,这个阶段会做两个事件

  1. 通过反射针对没有设置 lazy-init 属性的单例 bean 进行初始化。
  2. 实现 Bean 的依赖注入。

第三个阶段,Bean 的应用

通常咱们会通过 @Autowired 或者 BeanFactory.getBean()从 IOC 容器中获取指定的 bean 实例。

另外,针对设置 layy-init 属性以及非单例 bean 的实例化,是在每次获取 bean 对象的时候,调用 bean 的初始化办法来实现实例化的,并且 Spring IOC 容器不会去治理这些 Bean。

以上就是我对这个问题的了解。

总结

对于工作原理或者工作流程性的问题,大家肯定要留神答复的构造和节奏。

否则面试官会感觉很凌乱,无奈了解,导致面试的成果大打折扣。

高手的答复逻辑十分清晰,大家能够参考。

喜爱我的作品的小伙伴记得点赞和珍藏加关注。

版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自 Mic 带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!

退出移动版