写点什么

【SSM】Spring 系列——Spring 概述、第一个 Spring 程序、容器接口和实现类

作者:胖虎不秃头
  • 2022 年 9 月 15 日
    河南
  • 本文字数:2933 字

    阅读完需:约 10 分钟

【SSM】Spring系列——Spring概述、第一个Spring程序、容器接口和实现类

01 Spring 概述

1.1Spring 框架是什么

​ Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。spring 的核心是控制反转(IOC)和面向切面编程(AOP)。Spring 是可以在 Java SE/EE 中使用的轻量级开源框架。


​ Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度。就是让对象和对象(模块和模块)之间关系不是使用代码关联,而是通过配置来说明。即在 Spring 中说明对象(模块)的关系。


​ Spring 根据代码的功能特点,使用 Ioc 降低业务对象之间耦合度。IoC 使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由 Spring 容器统一管理,自动“注入”,注入即赋值。 而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务“混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。

1.2Spring 官网

官网:https://spring.io/


Spring 官网有 Spring 家族技术的介绍,有相应框架的 jar 包和文档,还有源码文件,必要的时候可以参考。

1.3Spring 的优点

  • Spring 是一个框架,是一个半成品的软件。

  • 有 20 个模块组成。

  • Spring 是存储对象的容器,不装文本和数字,装的是对象,用来管理对象。

1.3.1 轻量

  • Spring 框架使用的 jar 都比较小,一般在 1M 以下或者几百 kb。

  • Spring 核心功能的所需的 jar 总共在 3M 左右。

  • Spring 框架运行占用的资源少,运行效率高。不依赖其他 jar。

1.3.2 针对接口编程,解耦合

  • Spring 提供了 Ioc 控制反转,由容器管理对象,对象的依赖关系。

  • 原来在程序代码中的对象创建方式,现在由容器完成。

  • 对象之间的依赖解耦合。

1.3.3 AOP 编程的支持

将公共的、通用的、重复的代码单独开发,在需要的时候反织回去。底层的原理是动态代理


通过 Spring 提供的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松应付,在 Spring 中,开发人员可以从繁杂的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

1.3.4 方便集成各种优秀框架

Spring 不排斥各种优秀的开源框架,相反 Spring 可以降低各种框架的使用难度,Spring 提供了对各种优秀框架(如 Struts2,Hibernate、MyBatis)等的直接支持。简化框架的使用。


Spring 像插线板一样,其他框架是插头,可以容易的组合到一起。需要使用哪个框架,就把这个插头放入插线板。不需要可以轻易的移除。

1.4Spring 体系结构


Spring 由 20 多个模块组成,它们可以分为


  • 数据访问/集成(Data Access/Integration)

  • Web

  • 面向切面编程(AOP, Aspects)

  • 提供 JVM 的代理(Instrumentation)

  • 消息发送(Messaging)

  • 核心容器(Core Container)

  • 测试(Test)

02 IoC 控制反转

  • 控制反转 IoC(Inversion of Control) 是一个概念,是一种思想。

  • 指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。

  • 控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值, 依赖的管理。

  • IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式是依赖注入。应用广泛。


依赖


classA 类中含有 classB 的实例,在 classA 中调用 classB 的方法完成功能,即 classA 对 classB 有依赖。


Ioc 的实现


依赖注入:DI(Dependency Injection),程序代码不做定位查询,这些工作由容器自行完成。


  • 依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。

  • Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持对象之间依赖关系的管理。

  • Spring 框架使用依赖注入(DI)实现 IoC。

  • Spring 容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些 Java 对象被称为 Bean。

  • Spring 容器管理着容器中 Bean 之间的依赖关系,Spring 使用“依赖注入”的方式来管理 Bean 之间的依赖关系。

  • 使用 IoC 实现对象之间的解耦和。

2.1 基于 XML 的 DI

2.1.1 开发工具准备

开发工具: idea2020.1


依赖管理: maven3.6.3


jdk: 1.8 及以上

2.1.2 设置 maven 的本地仓库

2.2 Spring 的第一个程序

实现步骤如下:

1.1.1 创建 maven 项目

2.2.1 引入 maven 依赖 pom.xml

<properties>       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>         <maven.compiler.source>1.8</maven.compiler.source>       <maven.compiler.target>1.8</maven.compiler.target>  </properties>
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- 添加spring的依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.5.RELEASE</version> </dependency> </dependencies>
复制代码

2.2.2 定义实体类

public class Student {     private String name;      private int age;      //无参构造方法是为spring提供创建对象     public Student() {            System.**out**.println("我是学生类的无参构造方法");      }       //setXXX方法是为spring提供进行赋值操作的      public void setName(String name) {           this.name = name;    }      public void setAge(int age) {         this.age = age;      }     @Override       public String toString() {         return "Student{" +                "name='" + name + '\'' +               ", age=" + age +                '}';     } }
复制代码

2.2.3 创建 Spring 的配置文件

在 src/main/resources/目录现创建一个 xml 文件,文件名可以随意,但 Spring 建议的名称为 applicationContext.xml。


spring 配置中需要加入约束文件才能正常使用,约束文件是 xsd 扩展名。



<bean />:用于定义一个实例对象。一个实例对应一个 bean 元素。


id:该属性是 Bean 实例的唯一标识,程序通过 id 属性访问 Bean,Bean 与 Bean 间的依赖关系也是通过 id 属性关联的。


class:指定该 Bean 所属的类,注意这里只能是类,不能是接口。

2.2.4 创建测试类

2.2.5 使用 Spring 创建非自定义的类

spring 配置文件加入 java.util.Date 定义:


<bean id="myDate" class="java.util.Date" />
复制代码


MyTest 测试类中:


调用 getBean(“myDate”); 获取日期类对象。

2.3 容器接口和实现类

2.3.1ApplicationContext 接口(容器)


ApplicationContext 用于加载 Spring 的配置文件,在程序中充当“容器”的角色。其实现类有两个。

(1)配置文件在类路径下

若 Spring 配置文件存放在项目的类路径下,则使用 ClassPathXmlApplicationContext 实现类进行加载。


(2)ApplicationContext 容器中对象的装配时机

ApplicationContext 容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占用内存。Spring 初始化对象时要使用无参的构造方法,切记保证类中有无参构造方法。

(3)使用 spring 容器创建的 java 对象


发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2022.07.29 加入

还未添加个人简介

评论

发布
暂无评论
【SSM】Spring系列——Spring概述、第一个Spring程序、容器接口和实现类_spring_胖虎不秃头_InfoQ写作社区