网站首页 > 技术文章 正文
大家好,这里是老K分享的全网最完整的Java系列教程。
本期开始,我们要开启一个新的里程,了解和介绍一下Java最经典和实用的框架Spring,以及Spring的核心思想IoC控制反转。
关于Spring框架的内容有很多,可以先关注、收藏,慢慢阅读和吸收。
一、关于Spring
Spring是当下应用最广泛的Java框架,经过十几年的演进和发展,已经从一个基于J2EE的开源应用框架,发展成了全世界最大的Java框架生态体系。
Spring存在的目的是解决和降低企业应用开发的复杂性,为企业级应用的开发提供一套简洁且行之有效的标准方案。可以说,但凡你想从事Java工程师这个行业,就需要先熟悉Spring这个工具。
这里是Spring的官网:Spring-Website
Spring发展至今,已经衍生出很多基于Spring但功能各异的框架组件,形成一整套Spring生态。
以下是一些Spring核心的模块:
- Spring Framework:Spring的核心组件,用于开发应用,能有效降低开发和配置的复杂度;
- Spring Boot:基于Spring的轻量级应用开发框架;
- Spring Cloud:一系列框架的集合,用于开发分布式系统,能简化基础设施的配置;
- Spring Cloud Data Flow:便捷生成流式数据的框架,以满足微服务项目的数据传输要求;
- Spring Data:提供基于Spring的数据层模型;
- Spring Integration:轻量级的Spring企业集成扩展;
- Spring Batch:用于批处理的轻量级框架;
- Spring Security:安全的授权准入控制框架;
- ......
学习Spring,首先是了解其最基本和核心的内容——Spring Framework(可移步至官网了解信息spring.io/projects/spring-framework/).
二、关于IoC控制反转
IoC是Spring的核心思想,IoC即英文控制反转Inversion of Control的首字母。
2.1 概念
控制反转的核心思想是:让对象从传统的基于new关键词或工厂方法的依赖关系中脱离出来,由Spring容易来负责管理的思想。
这样做的好处在于:
- 更灵活:Spring容器是由配置文件来实现依赖关系的,所以不需要修改代码就能更新对象;
- 易测试:由于对象是从外部注入,使单元测试更容易;
- 低耦合:由外部容器管理对象之间的依赖关系,降低了系统的耦合度,提高了可扩展性。
2.2 传统依赖
以上这些概念可能太抽象了,所以我们接下来通过一组代码实例来认识一下IoC控制反转:
我们用最经典的苹果案例来说明一下传统依赖关系,新建一个maven项目,然后先设计一个Apple类:
- Apple.java
public class Apple {
private String title;
private String color;
private String origin;
public Apple() {
}
public Apple(String title, String color, String origin) {
this.title = title;
this.color = color;
this.origin = origin;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getOrigin() {
return origin;
}
public void setOrigin(String origin) {
this.origin = origin;
}
@Override
public String toString() {
return "Apple{" +
"title='" + title + '\'' +
", color='" + color + '\'' +
", origin='" + origin + '\'' +
'}';
}
}
传统的对象是通过new关键词完成对象的实例化:
- App.java
import Apple;
public class App {
public static void main(String[] args) {
Apple apple = new Apple("红富士", "红色", "欧洲");
System.out.println(apple.toString());
}
}
上述情形中,通过new将对象写入程序。这样的缺点在于,这时候这个apple以及它的各项属性都写入到程序中,成为程序的一部分。整个程序系统耦合度相当高,当后续要对对象的性质、内容进行调整,就要重新开发、测试、审批、上线。
2.3 Spring控制反转下的对象依赖
上述情况,通过Spring可以有效降低耦合。
我们先对项目进行一些配置和准备:
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.koder</groupId>
<artifactId>KoderSpring</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
</dependencies>
</project>
- 通过上述配置,完成SpringFramework的安装和配置。
然后我们再在resources目录下配置一个context.xml
- context.xml
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="apple" class="Apple">
<property name="title" value="红富士"/>
<property name="origin" value="欧洲"/>
<property name="color" value="红色"/>
</bean>
</beans>
- 这时候,IDEA程序会检测到文件为Spring配置文件,会询问“Configure Application Context”,选择配置即可;
- beans标签是标准写法,来自官网示例代码;
- bean标签就是Spring体系下的对象实体,配置bean的过程等同于在java中配置一个实例的过程;
- 配置属性id的值,相当于给这个实例一个变量名;
- 配置属性class的值,就相当于给实例找到匹配的类;
- 配置property就相当于给对应的属性赋值;
- 上述配置就相当于在java中的下述代码,差别就是这是写在配置文件中,不会造成程序的耦合:
Apple apple = new Apple();
apple.setTitle("红富士");
apple.setOrigin("欧洲");
apple.setColor("红色");
然后,我们就可以通过java程序,把配置文件中的bean实体引入到程序中来:
- App.java
import Apple;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:context.xml");
Apple apple = context.getBean("apple", Apple.class);
System.out.println(apple.getTitle());
}
}
- 通过ClassPathXmlApplicationContext类加载context配置文件,传入的路径是编译后target目录下的相对路径;
- 路径表达式以classpath:开头,然后跟配置文件在target目录下相对路径;
- 通过ClassPathXmlApplicationContext加载得到的ApplicationContext类,可以调用配置文件中的bean;
- 通过getBean获取配置文件中的bean实体,其中第一个参数和bean标签中的id值一致,第二个参数是改bean的class类;
- 这样得到的apple就和传统new关键词一样,但并没有把对象的创建配置和程序本身绑定在一起,当需要调整对象时,无需调整程序,仅修改配置文件即可;
- 小伙伴可以修改context.xml,查看不同结果.
结尾
以上就是简单实现Spring Ioc控制反转功能基本步骤。
通常说的IoC容器就是指context.xml中beans标签,就像一个容器一样,容纳各种通过bean生成的对象实例;
IoC控制反转并不是一个非常难懂的知识点,主要还是体现在编程思想的理解上,掌握并不难,但需要花时间理解其背后的编程思想,才能在工作中正在帮到我们,提高我们的开发效率。
最后,如果你觉得这篇文章对你有帮助,可以选择收藏一下。如果你愿意,也可以顺手点个赞~
结束语
我是专注于开发领域的 @老K玩代码 ,会持续生产关于如何学习编程语言的优质内容。
如果你想学习Java编程,或者想精进你的Java编程能力,可以关注我。
如果你对开发、编程有任何疑问或者有想了解的内容,而我暂时没有写到的,也欢迎随时来找我聊聊。
猜你喜欢
- 2024-10-15 BATJ面试必会之 Spring 篇(30题) 面试spring的面试题
- 2024-10-15 Spring知识点提炼 spring题
- 2024-10-15 springmvc的核心是啥,请求的流程怎么处理,控制反转怎么实现
- 2024-10-15 spring源码分析——spring大纲 spring源码分析和总结简书
- 2024-10-15 Spring思维导图,让Spring不再难懂(ioc篇)
- 2024-10-15 Spring框架介绍及使用 spring框架的使用步骤
- 2024-10-15 架构师必知必会:Java内置的控制反转机制-Service Provider
- 2024-10-15 轻松理解 Spirng IoC/控制方向反转
- 2024-10-15 什么是控制反转(ioc),通过解释总结告诉你
- 2024-10-15 搞透IOC,Spring IOC看这篇就够了
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)