ApplicationContext context = new FileSystemXmlApplicationContext("config-file-path")DemoService service = context.getBean(DemoService.class);service.doSomething();}

}

我相信每一个使用Spring框架构建的独立的Java应用,通常都会存在类似`context.getBean(...)`的代码,其实这行代码做的事情就是DL,而且构建每一种IoC容器背后发生的事情,更多的是DI的过程,当前也可能会有部分DL的逻辑用来对接旧的遗留系统。Spring的IoC容器的依赖注入工作分为两步走:阶段一、收集和注册Bean这个阶段中,开发者通过XML或者Java代码的方式来定义bean,然后以手动组装或让容器基于特定的机制自动扫描的形式,将这些定义好的bean收集到IoC容器中。假如我们以XML配置的方式来收集和注册如下一个单一bean,一般来说形式如下:
...
随着我们项目中bean越来越多,这样逐个手动配置比较麻烦,我们还可以使用如下方式配置来批量扫描并采集和注册一批bean:

<context:component-scan base-package=“x.x”/>

阶段二、分析和组装第一个阶段完成以后,我们可以先暂时认为IoC容器中保存着一个个相互独立的bean,它们之间还没有任何关系,但是实际项目中它们之间是有着不可或缺的关系的,所以呢,Ioc容器第二个阶段需要做的工作就是分析这些已经在IoC容器中bean,根据它们的依赖关系先后按顺序组装它们,工作原来是这样的:IoC发现一个bean依赖另外一个bean,那么它会将另一个bean注入给依赖它的那个bean,一直到所有的bean的依赖都完成注入。这个时候容器中所有的bean都已经准备好待使用,也就标志着整个IoC容器的工作完成。那么IoC容器分析和组装的依据是啥呢?Spring框架其实最早的时候只能通过XML配置文件来描述bean和bean之间的关系,但是随着Java生态研发技术以及理念的转变,又出现了基于Java代码和Annotation元信息的描述方式(比如@AutoWired和@Inject)。但是呢,无论使用哪一种配置方式,目的都是为了简化绑定逻辑描述的各种表象,最终也都是为本阶段的最终目的来服务。### 四、JavaConfig是个什么鬼?​  Java 5的出世,加上当时基于纯Java Annatation的依赖注入框架Guice的出现,就使得Spring框架和社区不得不顺应民意,出版并持续完善了基于Java代码和Annotation元信息的依赖关系绑定描述方式,就是JavaConfig项目。基于JavaConfig方式的依赖关系描述基本映射了早期基于XML方式的配置,比如:**1\. 表达形式**XML配置方式如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

   xmlns="http://www.springframework.org/schema/beans"         xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">// bean定义
JavaConfig的配置方式如下:

@Configuration

public class DemoConfiguration {

// bean定义

}

> 也就是说任何一个被标注了`@Configuration`注解的Java类都是一个JavaConfig配置类。**2\. 注册bean定义**XML配置方式:
...
JavaConfig配置方式:

@Configuration

public class DemoConfiguration {

@Beanpublic DemoService demoService() {return new DemoServiceImpl();}

}

> 也就是说任何一个标注了`@Bean`注解的方法,它的返回值就将作为一个bean定义注册到Spring的IoC容器,方法名将默认成为该bean在容器中的id.**3\. 表达依赖注入关系**XML配置形式:
<property name="dependencyService" ref="aService"/>
JavaConfig形式:

@Configuration

public class DemoConfiguration {

@Beanpublic AService aService() {return new AServiceImpl();}@Beanpublic BService bService() {return new BServiceImpl(aService());}

}

> 也就是说如果一个bean定义了依赖其他bean,就直接调用其对应JavaConfig类中依赖bean的创建方法即可。从以上种种表象我们可以看出,以前Spring IoC容器中具有的特性在JavaConfig中都可以进行表述,只是换了另外的一种形式而已。并且通过声明相应的Java Annotation反而“内聚”一起了,变得更加简洁了。### 五、那些常用的Annotation1. **`@ComponentScan`**​  该注解对应的是XML配置中的`<context:component-scan>`元素,用于配合一些元信息Java Annotation,比如`@Component`和`@Repository`等,将标注了这些注解的bean定义类批量采集到Spring的IoC容器中。# 《MySql面试专题》![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/323d061e349a5dda0977caa8107cf4b5.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/efe888023326af51541dc45b08058c5e.png)# 《MySql性能优化的21个最佳实践》![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/abacd1a6ffaf7f9871117f9d65b53f25.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/b69652b6f8f437369d407cda91b8557e.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/d32344e66a6bd20b21058be6c1e2c7ee.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/ce1d500b713a237936531e218ce1c2af.png)# 《MySQL高级知识笔记》![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/b069a90ee1f07e73bf7a91620327b592.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/9ec9681469064837738581c2152089e9.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/b79ed1933e439c25eff4f9e6152f57db.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/510410b369f47c8345cf4fc1fc78c9bd.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/0f493c0e5330af145b1bb39c1c054a7f.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/38638dc947e657cb35da795e75f80ecb.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/32287c9257ead838641f594ef01c6dd2.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/65d2e99de5dd3ef2fb3eb7156e19cdcc.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/dd0ab11778edb4c7d3dc28aa823aae58.png)![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/dc4310f3d8065b580176c867580d8396.png)文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](https://img-blog.csdnimg.cn/img_convert/6f9806273794229d9aeef497a9efc7ea.png)## 获取方式:[点击这里前往传送门](https://gitee.com/vip204888/java-p7)628685885424)][外链图片转存中...(img-WcyhOh0r-1628685885425)][外链图片转存中...(img-KgJT9bsH-1628685885426)]文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图[外链图片转存中...(img-yiQIevr1-1628685885426)]## 获取方式:[点击这里前往传送门](https://gitee.com/vip204888/java-p7)**关注我,点赞本文给更多有需要的人**

SpringBoot的幕后推手,五年Java开发者小米、阿里面经相关推荐

  1. JMeter压力测试,五年Java开发者小米、阿里面经

    下载地址:jmeter-plugins.org 安装:下载后文件为plugins-manager.jar格式,将其放入jmeter安装目录下的lib/ext目录,然后重启jmeter,即可. 启动je ...

  2. 五年Java开发者小米、阿里面经

    前言 每年金三银四,金九银十之际,想进阶梦想挑战大厂的朋友层出不穷. 梦想是要有的,万一就实现了呢?且撇开大牛们不说,每年面试之时问题也层出不穷,不得不说,每年被算法绝杀的朋友也是不在少数啊. 这篇文 ...

  3. SpringBoot的幕后推手...

    一.背景 ​ 这两年随着微服务的盛行,SpringBoot框架水到渠成的得到了高曝光,作为程序猿的我们,现在要是不知道一点SpringBoot相关的东西,貌似出去找工作都会被深深地鄙视,不过在我们开始 ...

  4. SpringBoot的幕后推手,分布式架构演进+相关笔记参考

    ​ 这两年随着微服务的盛行,SpringBoot框架水到渠成的得到了高曝光,作为程序猿的我们,现在要是不知道一点SpringBoot相关的东西,貌似出去找工作都会被深深地鄙视,不过在我们开始Sprin ...

  5. SpringBoot的幕后推手,Java后端知识体系

    阶段二.分析和组装 第一个阶段完成以后,我们可以先暂时认为IoC容器中保存着一个个相互独立的bean,它们之间还没有任何关系,但是实际项目中它们之间是有着不可或缺的关系的,所以呢,Ioc容器第二个阶段 ...

  6. SpringBoot的幕后推手,java互联网架构师系统vip课程

    那么IoC容器分析和组装的依据是啥呢?Spring框架其实最早的时候只能通过XML配置文件来描述bean和bean之间的关系,但是随着Java生态研发技术以及理念的转变,又出现了基于Java代码和An ...

  7. SpringBoot的幕后推手是谁?

    一.前言 半年前,偶然在视频号刷到某机构正在直播讲解 Playwright 框架的使用,就看了一会,感觉还不错,便被种草,就想着自己有时间也可以自己学一下,这一想着就半年多过去了. 读到这,你可能就去 ...

  8. android高级开发面试!五年Android开发者小米、阿里面经,Android篇

    最近我在接受采访时被问到我关于成为一名伟大的程序员见解.这是一个有趣的问题,我认为我们都可以是伟大的程序员,无论我们的天赋如何,如果我们遵循一些规则的话--我相信--这应该是常识.实际上,这些规则并不 ...

  9. 蔡徐坤一条微博转发过亿 幕后推手被判刑五年

    明星人物关注度高,发条微博几十上百万的转发评论也经常见,但是2018年,流量明星蔡徐坤的一条微博,居然有超过1亿的转发量. 按照当年的微博注册用户量,这意味着每三个用户就有一个转发了那条微博,显然荒谬 ...

最新文章

  1. 怎么重启网站mysql数据库_如何重启MySQL数据库服务
  2. TS2003基于触摸屏的应用
  3. AtCoder AGC034D Manhattan Max Matching (网络流)
  4. java timestamp是什么类型_JAVA比较2个Timestamp类型的时间大小-由此引发的思考
  5. Spark2.3(三十五)Spark Structured Streaming源代码剖析(从CSDN和Github中看到别人分析的源代码的文章值得收藏)...
  6. Mysql 导入导出数据结构及数据
  7. mysql临时表空间_MySQL 5.7 深度解析: 临时表空间
  8. 微服务下的应用架构设计(COLA架构)
  9. 解决hibernate双向关系造成的一方重复执行SQl,或者死循环的问题
  10. Leetcode每日一题:1365.how-many-numbers-are-smaller-than-the-current-number(有多少小于当前数字的数字)
  11. IDDD 实现领域驱动设计-理解限界上下文
  12. python能同时输出商和余数的函数_在两个独立变量中同时得到楼层除法和余数
  13. JMP软件在质量管理中的应用简述
  14. java.lang.IllegalStateException: No instances available for localhost
  15. Android视频播放器没声,Windows/Android/iOS全平台支持的视频播放器EasyPlayerPro,iOS版播放无音频问题如何解决?...
  16. qt实现windows系统下录屏功能
  17. Largest Submatrix (最大全1子矩阵)
  18. Docker (四) 容器基本命令
  19. 超长(超过70字)短信发送
  20. VLC Plugin JS 方法

热门文章

  1. LoadRunner 常用函数大全+1
  2. uva 815 Flooded!
  3. 有哪些好的编程习惯从一开始就值得坚持?
  4. sparc-linux-gcc math.h 调用,无法使用叮进行交叉编译为SPARC
  5. App平台频频露脸综艺节目 观众到底买账吗?
  6. 微信怎样操作开启微信运动?技巧经验!微信中如何去设置微信运动记录运动步数?
  7. RobotFramework set global/suite/test variable
  8. 1.[Sprd]-(Sprd9820e安卓4.4平台user版开启长按power键开启sysdump分析)
  9. VMware 虚拟机安装黑屏问题
  10. [ubuntn]常用软件安装方法