持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情
Spring 概述
Spring 是一个轻量级的开源框架,它由 Rod Johnson 创建。它是为了解决企业应用开发的复杂性而创建的。Spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而 Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。
Spring 是一个控制反转( IOC )和面向切面( AOP )的容器框架,这两部分也是 Spring 基础的核心部分。
Spring 已经从单一的 IOC 与 AOP 框架发展为一站式、多项目的基础平台系统。从 Spring Framework、Spring Data、Spring Security、Spring Session、Spring HATEOAS、Spring Batch、Spring AMQP、Spring Boot、Spring Cloud 、Spring Cloud Data Flow 等等,Spring 已经成为面向全领域的一体化解决方案,所以我们也会称之为 Spring 全家桶。
你也可以打开 Spring 官网: spring.io/ 了解更多的相关信息。
搭建环境
Spring 开发环境搭建关键就是两步动作,一是当前工程所需的 Spring 版本,通过 Maven 将所需 jar 包导入,二是创建工程所需的容器文件 applicationContext.xml 。
开发第一个spring IoC程序
1.创建一个maven文件(略)
2.在pom里面添加spring相关jar包
从 Maven 仓库 mvnrepository.com/ 获取 Spring 依赖 jar。
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>SpringDemo1</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SpringDemo1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<org.springframework.version>5.2.15.RELEASE</org.springframework.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.14</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3.在main的resource里面添加一个xml文件
4.在test目录下面新建一个包,然后添加一个Java文件
到这里spring环境搭建好了。
然后我们在main.java下面新建一个包,加入一个Java文件
添加代码:
package com.yamiya;
public class HelloWorld {
// 存储字符串信息
private String message;
public HelloWorld(){
}
// 通过 set/get 方法进行数据传递
public void setMessage(String message){
this.message = message;
}
public String getMessage(){
return this.message;
}
}
5.修改配置文件,就是resource下面那个xml文件
在上面的
XML 文件中,id="helloworld" 用来表示唯一的标识,class="com.yamiya.HelloWorld" 表示 JavaBean 的路径和来源。通过 property 可以设置 HelloWorld 类中的属性,name="message" 指的是类中属性名需要和 JavaBean 中定义的变量名保持一致 ,value=" hello world ,my is spring" 设定了向 JavaBean 中注入的字符串 " hello world ,my is spring "。
| 属性/子元素 | 说明 |
|---|---|
| id | 唯一标识符,用来代表唯一的 bean。 |
| class | 对象的类型(包名+类名) |
| property | 对象的一个属性 |
| property 中的 name | 属性名 |
| property 中的 value | 属性值 |
6.添加测试文件
在testspring对应下面添加testHelloworld测试方法
@Test
public void testHelloWorld(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("com/yamiya/applicationContext.xml");
HelloWorld hw = context.getBean("helloworld", HelloWorld.class);
System.out.println(hw.getMessage());
context.close();
}
上面代码中,首先使用 ClassPathXmlApplicationContext 对象获取 XML 配置文件,然后对 XML 配置文件进行解析,解析后通过调用 getBean() 方法获取 id 为 helloworld 的 HelloWorld 对象,最后调用 getMessage() 方法输出字符串值。
springIOC
-
IOC 是什么?
IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在 Java 开发中,IOC 意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
谁控制谁,控制什么: 传统 Java SE 程序设计,我们直接在对象内部通过 new 进行创建对象,是程序主动去创建依赖对象;而 IoC 是有专门一个容器来创建这些对象,即由 IoC 容器来控制对象的创建。
为何是反转,哪些方面反转了: 有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象。
-
IOC 能做什么?
IoC 是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了 IoC 容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
-
Spring 是实现 IOC 容器和非侵入性的框架。
IOC 被称为反向控制,也可以称为控制反转。其概念是表示对象关系之间的依赖转移,通过依赖转移可以控制被依赖的一方。在 Spring 中的具体表现是,不直接在程序创建类对象,从而减少耦合,而在 Spring 配置容器的配置文件中,定义类的对象和相关服务。
IOC 是一种全新的设计模式,它一改以前在程序中创建对象并实例化的方式,而通过 IOC 容器来管理对象的生命周期,依赖关系等,这样做将类的实现和类配置进行完全分离,当依赖关系或者服务发生变化时,只需要修改配置文件,而不必重新修改并编译具体的 Java 代码。
AOP概述
AOP 是软件开发思想发展到一定阶段的产物,但 AOP 的出现并不是要完全替代 OOP,而仅是作为 OOP 的补充而存在。
AOP 的应用场合是受限的,它一般只适合于那些具有横切逻辑的应用场合,如性能监测、访问控制、事务管理以及日志记录。虽然受限但不影响 AOP 作为一种新的软件开发思想在软件开发领域所占有的地位。
- AOP 是什么?
AOP 是 Aspect Oriented Programing 的简称,也可称为面向方面的编程或面向切面的编程都可,当多个对象类共同组合在
一起完成一个功能时,就增加了模块的耦合性,这时可以利用 AOP 对此业务逻辑的各部分进行分离,降低耦合度。
- AOP 技术的作用
AOP 技术是一种“横切”技术,它将这些大量重复的、不利于模块重用的横切代码封装成一个公共可重用模块,这样就减少系统重复的代码,降低模块之间的耦合度。
通过 AOP 可以很容易将系统中的代码分成两个部分:一个部分是实现具体业务逻辑功能代码;另一个部分是实现日志记录,性能统计,安全控制,事务处理,异常处理等方面的代码。
AOP 的作用在于分离这些非具体业务逻辑代码,然后统一进行管理操作。
AOP 希望将这些分散在各个业务逻辑代码中的相同代码,通过横向切割的方式抽取到一个独立的模块中,还业务逻辑类一个清新的世界,AOP 通过横向抽取机制为这一类无法通过纵向继承体系进行抽象的重复性代码提供了解决方案。
Spring IOC,它是 Spring 的核心和基础。对于解耦合,开发人员在“new”、“工厂模式”的基础上构思出了 Sping IOC 的方式,可以最大程度的实现解耦合。