众所周知,Spring的精髓是什么?没错,就是IOC(DI)和AOP。

AOP在之前已有记载,点击传送  Spring双生武魂之AOP

什么是IOC?

小白肯定不知道什么是IOC或者说DI,这里就直接白话,方便小白理解

IOC(Inversion of Control):控制反转

控制反转,我们需要知道的是反转的是资源获取方向的控制。这样理解,平时我们在写好一个类时,在实例化时需要new,那就是向容器发起资源请求,容器是收到请求后才被动的给我们资源。而应用IOC后,则变为容器主动来推送资源。

DI(Dependency Injection):依赖注入

通俗理解为我们准备了一些方式来接受容器给我们推过来的资源,例如我们常用的setter方法。

而Spring框架所做的事就是用IOC来管理bean,并且为程序直接提供bean实例。

以下从三个问题进入正题

怎样将我们的bean纳入IOC容器的管理?

首先准备一个类作为实例

public class HelloWorld {private String name;private int age;public  HelloWorld(){System.out.println("正在调用HelloWorld的构造函数");}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

然后将该bean在配置文件中“声明"(纳入IOC管理)

其中id就是该bean的名字,理解成给bean起名字就可以,class就是类的路径

property标签中做的就是依赖注入(注入属性),理解成给bean的属性赋值即可

怎样创建IOC容器?

Spring提供了两种方式实现,这里我们主要讲第二种

BeanFactory: IOC 容器的基本实现

ApplicationContext: 提供了更多的高级特性,是 BeanFactory 的子接口

ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");

ApplicationContext 在初始化上下文时就实例化所有单例的 Bean。(默认 spirng 容器中 的 bean 都是单例对象)

怎么从IOC容器中获取bean?

使用getbean()方法获取bean,其中的参数:

String:根据配置文件中的 ID 属性来获取 bean

Class:根据对象的类型来获取 bean

完整实例

public static void main(String[] args) {//创建IOC容器ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");//getBean方法从容器中获取BeanHelloWorld helloWorld =(HelloWorld) ioc.getBean("hello");//调用方法测试String name = helloWorld.getName();System.out.println(name);System.out.println(helloWorld.getAge());}

结果:

可以看到容器确实给了我们一个bean的实例,而且该实例的属性也是通过依赖注入的方式进去的。因为在其中还有作者其他配置好的bean,同时也佐证了上文提到的在ApplicationContext初始化时,所有IOC管理的bean都进行了实例化!(而且默认是单例)

依赖注入(DI)

不要把依赖想得很复杂,初学阶段就理解为给bean中实例的属性赋值

注入的方式有三种,分别是:

1.通过属性注入

2.通过构造方法注入

3.通过工厂方法注入

通过属性

通俗来说就是在配置文件中写好,然后运行时程序就会注入,类似于上文的

通过构造方法

通俗来说就是,调用有参的构造方法进行注入,例如

Spring双生武魂之IOC相关推荐

  1. 震惊!!!年度双生武魂诞生现场----双统安装(centos与windows)

    这里写自定义目录标题 新服务器的入手 开启前的准备 一.windows的安装 二.centos的安装 新服务器的入手 随着我们部门数据量的增多,boss给我们整了个新服务器,到手后让我给调教-咳咳,让 ...

  2. Spring的双生武魂之AOP

    AOP Spring的灵魂是什么?AOP和IOC! AOP全称(Aspect-Oriented Programming),面向切面编程,是一种新的方法论, 是对传统OOP(Object-Oriente ...

  3. 【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable

  4. Spring源码之The IoC container官方文档翻译

    官方文档:https://docs.spring.io/spring/docs/4.3.21.RELEASE/spring-framework-reference/htmlsingle/#beans ...

  5. Spring:(二)IOC

    文章目录 2.1 IOC简介 2.2 IOC容器 2.3 xml方式Bean管理 2.3.1 什么是Bean管理 2.3.2 xml方式创建对象 2.3.3 xml方式注入属性 2.3.4 xml注入 ...

  6. 阿里飞天大数据飞天AI平台“双生”系统正式发布,9大全新数据产品集中亮相

    作者 | 夕颜 责编 | 唐小引 出品 | AI科技大本营(ID:rgznai100) 如今,大数据和 AI 已经成为两个分不开的词汇,没有大数据,AI 就失去了根基:没有 AI,数据不会呈现爆发式的 ...

  7. Spring的控制反转(IOC)和依赖注入(DI)具体解释

    Spring的控制反转(IOC)和依赖注入(DI)具体解释 首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应 ...

  8. spring框架的概述以及spring中基于XML的IOC配置——概念

    1.spring的概述     spring是什么     spring的两大核心     spring的发展历程和优势     spring体系结构 2.程序的耦合及解耦     曾经案例中问题   ...

  9. 【spring源码分析】IOC容器初始化(二)

    前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...

最新文章

  1. 五年循环期限已到,我们又要步入“AI寒冬”了吗?
  2. Srping Boot日志输出(转)
  3. JAVA实现重建二叉树(《剑指offer》)
  4. wireshark合并多个文件_TEQC合并多个时段GPS RINEX文件
  5. Py之simplejson:simplejson库的简介、安装、使用方法之详细攻略
  6. poll函数_I/O--多路复用的三种机制Select,Poll和Epoll对比
  7. PHP的静态方法与普通方法
  8. java barrier_Java并发类CyclicBarrier方法详解
  9. vim永久取消空格颜色
  10. mac怎么装java eclipse_如何在Mac系统安装eclipse并运行java程序
  11. Python学习笔记11:标准库之文件管理(os包,shutil包)
  12. svm loss function是什么
  13. 机械臂手眼标定原理及代码
  14. 电脑Win7系统桌面图标太大怎么调小
  15. HTTP API 认证授权术
  16. 五笔字典86版wubi拆字图编码查询
  17. 斑马打印机怎么设置标签纸
  18. 副业案例一:变现100万美元的国外网课销售漏斗模型案例
  19. linux 删除乱码文件名的文件
  20. 智慧农业整体解决方案

热门文章

  1. python列表按照字母排序_Python:按字母顺序对列表进行排序/分组
  2. Oracle性能优化 以及 库缓存命中率及等待事件
  3. 第二届中国大数据安全高层论坛在贵阳举行
  4. Visual Studio 2022 中的键盘快捷方式
  5. 做微商洗发水怎么做引流?洗发水类微商怎么引流精准客户?
  6. 学习绘画应该怎么起步?
  7. python真的好学吗?
  8. Prometheus + Grafana 实现监控功能总结
  9. U-MEX and Increments
  10. el-upload 仅上传一张图片