前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot中的IoC

SpringBoot中的IoC

作者头像
用户1327360
发布2018-03-07 16:28:00
2K0
发布2018-03-07 16:28:00
举报
文章被收录于专栏:决胜机器学习

SpringBoot中的IoC

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

一、Spring IoC

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

典型的Spring IoC方式如下:

代码语言:javascript
复制
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。

例如:

代码语言:javascript
复制
@Configuration
public class TestConfiguration{
//bean定义
}

2)注册bean定义层面

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

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

代码语言:javascript
复制
@Bean
publicTestService testService(){
return new TestServiceImpl();
}

3)表达依赖注入层面

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

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

代码语言:javascript
复制
@Bean
publicDependencyService dependencyService(){
return new DependencyServiceImpl(testService());
}

4)优化

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

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

——written by linhxx 2017.09.22

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决胜机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档