Spring双生武魂之IOC
众所周知,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相关推荐
- 震惊!!!年度双生武魂诞生现场----双统安装(centos与windows)
这里写自定义目录标题 新服务器的入手 开启前的准备 一.windows的安装 二.centos的安装 新服务器的入手 随着我们部门数据量的增多,boss给我们整了个新服务器,到手后让我给调教-咳咳,让 ...
- Spring的双生武魂之AOP
AOP Spring的灵魂是什么?AOP和IOC! AOP全称(Aspect-Oriented Programming),面向切面编程,是一种新的方法论, 是对传统OOP(Object-Oriente ...
- 【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable
- Spring源码之The IoC container官方文档翻译
官方文档:https://docs.spring.io/spring/docs/4.3.21.RELEASE/spring-framework-reference/htmlsingle/#beans ...
- 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注入 ...
- 阿里飞天大数据飞天AI平台“双生”系统正式发布,9大全新数据产品集中亮相
作者 | 夕颜 责编 | 唐小引 出品 | AI科技大本营(ID:rgznai100) 如今,大数据和 AI 已经成为两个分不开的词汇,没有大数据,AI 就失去了根基:没有 AI,数据不会呈现爆发式的 ...
- Spring的控制反转(IOC)和依赖注入(DI)具体解释
Spring的控制反转(IOC)和依赖注入(DI)具体解释 首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应 ...
- spring框架的概述以及spring中基于XML的IOC配置——概念
1.spring的概述 spring是什么 spring的两大核心 spring的发展历程和优势 spring体系结构 2.程序的耦合及解耦 曾经案例中问题 ...
- 【spring源码分析】IOC容器初始化(二)
前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...
最新文章
- 五年循环期限已到,我们又要步入“AI寒冬”了吗?
- Srping Boot日志输出(转)
- JAVA实现重建二叉树(《剑指offer》)
- wireshark合并多个文件_TEQC合并多个时段GPS RINEX文件
- Py之simplejson:simplejson库的简介、安装、使用方法之详细攻略
- poll函数_I/O--多路复用的三种机制Select,Poll和Epoll对比
- PHP的静态方法与普通方法
- java barrier_Java并发类CyclicBarrier方法详解
- vim永久取消空格颜色
- mac怎么装java eclipse_如何在Mac系统安装eclipse并运行java程序
- Python学习笔记11:标准库之文件管理(os包,shutil包)
- svm loss function是什么
- 机械臂手眼标定原理及代码
- 电脑Win7系统桌面图标太大怎么调小
- HTTP API 认证授权术
- 五笔字典86版wubi拆字图编码查询
- 斑马打印机怎么设置标签纸
- 副业案例一:变现100万美元的国外网课销售漏斗模型案例
- linux 删除乱码文件名的文件
- 智慧农业整体解决方案