[刘阳Java]_Spring IoC原理_第2讲
Spring IoC(DI)是Spring框架的核心,所有对象的生命周期都是由它们来管理。对于弄懂Spring IOC是相当关键,往往我们第一次接触Spring IOC大家都是一头雾水。当然我们这篇文章会通过程序例子的方式来告诉大家。但是我不能说自己就相当专业,如果还有不懂的朋友们建议去看一下Spring的官方文档,或者是参考网上其他的一些博客。
1. Spring IOC的概念
- IOC(Inversion of Control,控制反转),所有的Java类(不管是JDK库中Java类,还是你自己定义Java类)都可以利用Spring框架来new它们的实例化对象
- Spring框架完成对Java类的初始化对象工作
- Spring来负责控制对象的生命周期和对象间的关系
2. Spring DI的概念
- DI(Dependency Injection,依赖注入),它主要作用是动态的向某个对象提供它所需要的其他对象
3. Spring IoC和DI 它们是否有区别吗?
- 我个人观点,其实Spring中IOC和DI其实概念一样
- IOC控制反转,所有的Java类的初始化工作扔给Spring框架。Spring框架充分利用Java反射
- DI依赖注入,一个Java类如果依赖其他Java类,则此类依赖另一个Java类的初始化工作也扔给Spring框架来完成。例如下面的描述可以帮助再次理解DI的核心功能
- 你可以通过从MVC分层开发角度去理解一下DI
- 在开发过程中,大家都知道Controller控制器依赖Service,假设整个Web开发过程中我们使用Spring框架,则Serivce的初始化工作Controller不用关心Service对象是如何创建的,Service创建过程扔给Spring框架
- DI和IOC程序实现的原理是什么

4. 上面确实是从我个人角度去理解和告诉大家什么是Spring IOC,下面开始我们的第一个Spring框架的程序。它能告诉你如何编写一个由Spring框架导向的Java程序
- 运行Spring框架首先要导入Spring相关的开发包。如果使用spring.4.0.3版本导包要包含(spring-core.jar, spring-beans.jar, spring-context.jar, spring-expression.jar, common-logging.jar)
- 创建一个Person的Java类
public class Person {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
- 创建一个Spring的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="person" class="com.gxa.spring.day01.Person"></bean>
</beans>
- 创建一个测试程序来运行一段由Spring框架所管理的配置文件
package com.gxa.spring.test01; import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.gxa.spring.day01.Person; public class Test01 { @Test
public void m01() {
/**
* 运行Spring框架需要用到BeanFactory
* 1.BeanFactory帮助我们启动IOC容器
* 2.帮助我们找到需要实例化Java对象
*/
BeanFactorybeanFactory = new ClassPathXmlApplicationContext("spring.xml");
Person person = (Person) beanFactory.getBean("person");
person.setName("Hello World");
System.out.println(person.getName());
}
}
5. 上面的第一个Spring框架的代码,我这里简单的说明一下几个关键点
- 以后我们编写好的Java类都会在Spring的配置文件进行注册
- Spring配置文件就是一个容器工厂,它会在运行程序的时候检测配置文件中注入的Java类。当检测有Java类在配置文件中,那么Spring框架就会给这些Java类创建对象
- BeanFactory是Spring框架中的核心接口,在一个Java应用程序运行的时候,它帮助我们启动IoC容器,同时帮助我们找到需要实例化的Java对象
- 如何找到需要实例化的Java对象呢?通过BeanFactory接口中的getBean(String beanName)方法来实现

视频下载地址:https://pan.baidu.com/s/1eSDZwFg
[刘阳Java]_Spring IoC原理_第2讲的更多相关文章
- [刘阳Java]_Spring AOP入门_第7讲
AOP技术个人认为是能够完善(改善)面向对象编程OOP.为什么这么说,我们得先从AOP的概念说起,然后通过一段简单的例子加以佐证.这样子大家就可以慢慢地了解AOP 1. AOP概念 AOP为Aspec ...
- [刘阳Java]_Spring IOC程序代码如何编写_第3讲
第2讲我们介绍了Spring IOC的基本原理,这篇文章告诉大家Spring IOC程序代码是如何编写的,从而可以更好的理解IOC和DI的概念(所有的Java类的初始化工作扔给Spring框架,一个J ...
- [刘阳Java]_JVM工作流程_第4讲
程序员写好一段Java源程序-->编译-->字节码-->JVM-->硬件平台(操作系统)
- [刘阳Java]_Java环境搭建_第2讲
1.为什么搭建Java的环境 Java的程序语言不能独立在操作系统上运行 Java程序需要一个JVM(Java虚拟机)才能将程序员写好的Java程序运行在操作系统 Java程序的跨平台(Mac, Li ...
- [刘阳Java]_eayui-searchbox搜索组件_第6讲
EasyUI中搜索框也是常用的基本组件,可以用到条件搜索中 <!DOCTYPE html> <html> <head> <meta charset=" ...
- [刘阳Java]_eayui-pagination分页组件_第5讲
分页组件也是很基本的应用,这里我只给出一段简单的代码 关键注意一点:分页组件可以在上面添加buttons按钮,或者自定义分页组件的外观.这些内容需要自行的查看EasyUI的API文档 <!DOC ...
- [刘阳Java]_easyui-draggable拖动组件_第4讲
easyui-draggable的拖动组件还是比较好用的,它能够快速地实现网页中元素的拖动效果 实现easyui-draggable拖动组件有两种方式:纯HTML方式和JS方式 纯HTML方式实现拖动 ...
- [刘阳Java]_easyui-panel组件入门级_第3讲
EasyUI中的panel组件在前面一节中我们简单告诉了大家代码如何写.这一节我们会从panel的入门级开始讲起走,重点包括它的事件监听,属性tool介绍 1. 事件监听-通过data-options ...
- [刘阳Java]_TortoiseSVN基础应用_第1讲
TortoiseSVN是一个免费的SVN客户端,非常好用.这里我们介绍一下TortoiseSVN基础应用. 下面的内容是转载博客园的某兄弟写的,个人觉得很不错.所以尊重转载的这篇文章,必须要给出这篇博 ...
随机推荐
- 华为MDC自动驾驶
华为MDC自动驾驶 智能驾驶汽车中,包含四个核心子系统:传感器.计算平台.执行器与应用算法,华为MDC( Mobile Data Center: 移动数据中心)定位为智能驾驶的计算平台.此平台集成了华 ...
- IPv6 与 IPv4现状
IPv6 与 IPv4现状 一.概述 (1) IPv4可提供bai4,294,967,296个地址,IPv6将原来的32位地址空间增大du到128位,数目是zhi2的128次方.能够对地球上每平方米d ...
- jmeter设置成中文显示
meter默认语言设置: 1.临时设置: 进入options -- Choose Language -- 选择中文简体,设置后语言切换成中文,重启失效 2.永久设置:进入jmeter目录下的bin目录 ...
- 认真总结Vue3中ref与reactive区别和isRef与isReactive 类型判断
1.什么是ref? 1.ref和reactive-样 也是用来实现响应式数据的方法 由于reactive必须传递一个对象, 所以导致在企业开发中如果我们只想让某个变量实现响应式的时候会非常麻烦 所以V ...
- jmeter--JSON Extractor 用法
JMeter处理大部分请求返回的结果,都是json.对于请求返回的结果,处理以后作为其他请求的参数,有一个方便使用的插件:JSON Extractor JSON Extractor中文叫做json提取 ...
- Django基础之cookie与session
cookie与session 由来及简介 HTTP协议四大特性 1.基于请求响应 2.基于TCP.IP作用于应用层之上 3.无连接 4.无状态 基于HTTP协议的通信无法记录客户端状态 但是现在很多软 ...
- 懒人 IDEA 插件推荐:EasyCode 一键帮你生成所需代码
Easycode是idea的一个插件,可以直接对数据的表生成entity,controller,service,dao,mapper,无需任何编码,简单而强大. 1.安装(EasyCode) 我这里的 ...
- 【题解】滑雪 luogu1434 记忆化搜索
记忆化搜索入门题 题目 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在 ...
- Kubernetes使用节点污点和pod容忍度阻止节点调度到特定节点
Kubernetes允许你去影响pod被调度到哪个节点.起初,只能通过在pod规范里指定节点选择器来实现,后面其他的机制逐渐加入来扩容这项功能,本章将包括这些内容. 现在要介绍的高级调度的两个特性是节 ...
- MindSpore模型精度调优实战:如何更快定位精度问题
摘要:为大家梳理了针对常见精度问题的调试调优指南,将以"MindSpore模型精度调优实战"系列文章的形式分享出来,帮助大家轻松定位精度问题,快速优化模型精度. 本文分享自华为云社 ...