SpringBoot中的IoC

SpringBoot中的IoC

(原创内容,转载请注明来源,谢谢)

一、Spring IoC

IoC又称为依赖反转,有两种方式,一种是DI(依赖注入),另一种是DL(依赖查找)。DI是当前实体被动依赖其他组件的IoC注入,DL是当前实体主动注册某个服务。

典型的Spring IoC方式如下:

ApplicationContextcontext = new FileSystemXmlApplicationContext(....);
MockServiceservice = context.getBean(MockService.class);
service.doSomething();

其中第二行的context.getBean就属于DL的过程,即主动去加载某个服务。但是构建IoC容器的背后,更多的是DI。

1、Spring IoC DI流程

1)收集和注册

第一阶段是构建和收集Bean,通常通过XML或者java代码的方式进行构建和定义。

2)分析和组装

收集和注册后,每个Bean都是一个独立的个体,则需要在这个阶段将每个bean联系起来,如果bean之间有依赖关系的,还需要进行依赖。

早期Spring可以通过xml进行此工作,但是Springboot中,更趋向于使用Annotation的方式,即@注解的方式。

2、Java Config

基于Java Config的方式,即对Annotation的完美实现。

1)表达形式层面

对于以前复杂的bean的xml的配置,现在可以用注解的方式来实现。对于定义一个类作为javaconfig,只需要在类的上方加上@Configuration,即将其定义成一个bean。

例如:

@Configuration
public class TestConfiguration{
//bean定义
}

2)注册bean定义层面

对于备注了Configuration内部的方法,加上@Bean,则将其标注成bean,其返回值将作为一个bean注册到Spring IoC容器,方法名默认称为该bean定义的id。

例如对于上述class,其中的某个类:

@Bean
publicTestService testService(){
return new TestServiceImpl();
}

3)表达依赖注入层面

对于某个bean,如果依赖于其他的bean,则只需要在该方法返回值的new构造方法中,传入所依赖的bean对应的方法即可。

例如对于上述方法,如果有一个方法依赖上述方法,则:

@Bean
publicDependencyService dependencyService(){
return new DependencyServiceImpl(testService());
}

4)优化

对于多个bean互相依赖,对于同一个类,并不会产生多个实例。

Spring boot通过拦截配置类避免多次初始化某个类。对于bean的依赖,会先查看拦截配置类是否已经实例化过该类,只有在没有实例化过该类的情况下,才会请求父类的同一方法来实现实例化。

——written by linhxx 2017.09.22

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2017-09-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

网络爬虫相关库/工具/API大列表

【导读】详细罗列了用户Web抓取的工具、编程库和API列表,包括Python、PHP、Ruby、JavaScript等。

1392
来自专栏菩提树下的杨过

spring cloud 学习(4) - hystrix 服务熔断处理

hystrix 是一个专用于服务熔断处理的开源项目,当依赖的服务方出现故障不可用时,hystrix有一个所谓的断路器,一但打开,就会直接拦截掉对故障服务的调用,...

2105
来自专栏纯洁的微笑

springboot(二):web综合开发

上篇文章介绍了Spring boot初级教程:spring boot(一):入门篇,方便大家快速入门、了解实践Spring boot特性;本篇文章接着上篇内容继...

4106
来自专栏java一日一条

Spring面试问答Top 25

本人收集了一些在大家在面试时被经常问及的关于Spring的主要问题,这些问题有可能在你下次面试时就会被问到。对于本文中未提及的Spring其他模块,我会单独分享...

802
来自专栏技术墨客

Spring-boot特性(2) 原

在使用Spring-boot时,永远要记住它仅仅是Spring Framework的延伸(或者说整合),其底层还是基于Spring Framework(core...

2492
来自专栏精讲JAVA

Spring MVC 到底是如何工作的?

这篇文章将深入探讨Spring框架的一部分——Spring Web MVC的强大功能及其内部工作原理。

973
来自专栏蓝天

Linux下压力测试工具推荐:WebBench

由于我的VPS的服务器不是Apache,而且我也找不到ab测试工具。所以只好Google一下咯。发现一个参数少又精的压力测试工具,但是始终没有找到最新版本。只好...

1232
来自专栏java系列博客

Java面试通关要点汇总集之框架篇参考答案

2244
来自专栏互联网杂技

SpringBoot ( 二 ) :web 综合开发

spring boot web开发非常的简单,其中包括常用的json输出、filters、property、log等。

1203
来自专栏电光石火

使用idea创建一个web的Gradle项目

1 生成基本的项目结构 1.1    使用Spring Initializr新建一个项目。 ? 注意:这里Packaging要选war包,这个选项对自...

3062

扫码关注云+社区

领取腾讯云代金券