【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体系结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tsma86UO-1658153514963)(../../../../Pictures/Spring/wps229.jpg)]

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的本地仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SEFAVCp8-1658153514964)(../../../../Pictures/Spring/wps230.png)]

2.2 Spring的第一个程序

实现步骤如下:

1.1.1 创建maven项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dchUQ8hU-1658153514964)(../../../../Pictures/Spring/wps231.jpg)]

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 扩展名。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4BkHVsDU-1658153514965)(../../../../Pictures/Spring/wps232.jpg)]

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

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

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

2.2.4 创建测试类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EaA30XLq-1658153514965)(../../../../Pictures/Spring/wps233.jpg)]

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

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

<bean id="myDate" class="java.util.Date" />

MyTest 测试类中:

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

2.3 容器接口和实现类

2.3.1ApplicationContext 接口(容器)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IQq8IqcJ-1658153514965)(../../../../Pictures/Spring/wps234.png)]

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ShFRzYJd-1658153514966)(../../../../Pictures/Spring/wps235.jpg)]

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QVckImJv-1658153514966)(../../../../Pictures/Spring/wps236.jpg)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值