Bootstrap

初学spring 框架(了解spring框架的技术背景,核心体现,入门案例)

目录

技术背景

为什么要学习spring 框架?

学习spring 框架可以解决什么问题?

了解spring框架的核心体现

入门案例

步骤

1 导入 依赖

2 搭建三层架构体现【根据实际情况 构建】

3 添加配置文件

Test 测试类中 从 Ioc 容器 获取 Student 对象

总结


技术背景

为什么要学习spring 框架?,和学习spring 框架可以解决什么问题?在学习spring的时候,我们要带着问题去学习。

为什么要学习spring 框架?

答:之前基于三层模型开发时,在业务逻辑的代码中能看到很多的手动new对象的代码,这样会造成高度耦合。

什么是高度耦合 ?,高度耦合有什么影响?

高度耦合是指系统或组件之间的依赖关系过于紧密,导致一个部分的改动会影响到其他部分。这种紧密依赖使得系统难以维护和扩展

高度耦合的影响:

  1. 维护困难:修改一个组件可能需要调整多个相关组件,增加了维护的复杂性和成本。

  2. 扩展性差:添加新功能时,可能需要改动大量现有代码,影响系统的灵活性和扩展性。

  3. 可重用性低:组件因依赖过多,难以独立使用,降低了代码的可重用性。

  4. 测试复杂:由于组件间依赖紧密,单独测试一个组件变得困难,增加了测试的复杂性。

  5. 风险增加:一个组件的错误可能波及整个系统,增加了系统故障的风险。

示例:

假设有一个电商系统,订单处理模块直接依赖库存管理模块和支付模块,且这些模块之间紧密关联。如果库存管理模块的接口变动,订单处理模块也需要相应调整,甚至可能影响到支付模块。

总结:

高度耦合会增加系统的复杂性,降低灵活性和可维护性。通过降低耦合,可以提高系统的模块化和可维护性。

为什么手动new对象的代码,这样会造成高度耦合?

答:接口和 实现类之前依赖特别紧密

原因:

  基于三层架构:无论是service,dao/mapper  都会有对应的实现类 实现对应的接口 。一般是 接口类型 接口名=new 具体实现类 如果实现类中【构造方法参数,实现类的类名】发生改变,那么因它导致之前通过 new 的对象 都会因此报错。为了解决这种 接口和 实现类这种 紧密的关系,才有了 spring 框架。

学习spring 框架可以解决什么问题?

学习spring 框架 可以  降低 耦合性 有利于 代码的维护 和扩展

第一个问题:spring 框架是怎么降低 耦合性的【具体的实现】?

  • 之前因 手动new 创建对象 导致 高度耦合性。spring 框架 是把  对象的创建权 从使用者,交给第三方 来实现 对象的创建 ,具体是 通过 工厂 来设计,生产 对象的。

第二问题:spring怎么知道 要生产什么样的对象?

  • 这在之后的学习会知道,通过在spring 的配置文件中 添加 目标对象  一般是通过<bean>...</bean> 实现

第三个问题:怎么从 spring 获得指定的对象?

  • 这在之后的学习会知道,创建一个容器对象,通过调用 getBean方法获得指定对象

第四个问题:如何管理 创建对象,对象和对象之前的 关系应该怎么维护?

  • 这在之后学习 Dl 依赖注入 会提到

根据上面提到的问题 spring 框架解决 主要依赖以下 spring框架的 核心

了解spring框架的核心体现

控制反转IOC )

指的是将对象的创建权交给 Spring 去创建。使用 Spring 之前,对象的创建都是由我们自己在代码中new创建。而使用 Spring 之后。对象的创建都是给了 Spring 框架。

应用场景:创建对象

依赖注入 DI  )

是指依赖的对象不需要手动调用 setXX 方法去设置,而是通过配置赋值。

应用场景:为属性赋值【对象。。。。】

面向切面编程 (AOP )

 之后的博客会详细介绍IOC,Dl,AOP

入门案例

使用 IDEA 创建 Student 类 ,类中有3个字段 id,name ,gender 搭建 spring 框架  当 id=1 ,name=李华,gender=" 男"获取三个字段的值 并打印在控制台中。

步骤

1 导入 依赖

1.1 向 pom文件中添加 spring-context   依赖

步骤

1  从maven 中央仓库中获取  spring-context   依赖 坐标

  • 如果不清楚的,可以看 我之前写的博客:CSDN

2 复制粘贴到pom文件中,使用 <dependencies> </dependencies> 标签 包裹

3 刷新


 

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.23</version>
    </dependency>

2 搭建三层架构体现【根据实际情况 构建】

2.1 基本的 service 层 ,dao/mapper 层 ,entity 【实体类】

3 添加配置文件

3.1 新建--xml配置文件-Spring 配置

3.2 创建完成后

3.3 为目标类 在xml 配置文件中添加 bean 标签

bean 标签的属性

  • id:唯一标识符
  • class:目标类的路径【包名+类名】

注意:每一个对象 都对应一个bean 标签

property标签 的属性

  • name: 字段名
  • value:给属性赋值

注意:给属性赋值,使用 property 标签

Test 测试类中 从 Ioc 容器 获取 Student 对象

步骤

1 创建 IOC容器对象

2 调用getBean方法

package fs;

import fs.entity.Student;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
        //  创建 IOC容器对象的同时,加载配置文件
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("springConfig.xml");
          // 调用 getBean 方法 通过向下转型的方式获得  Student 对象
        Student student = (Student) context.getBean("student");
        System.out.println(student);
    }
}

运行结果

总结

本篇博客,介绍了 为什么要学习 spring框架?,学习spring 框架可以解决什么问题?以及如何初步的使用 spring 框架 创建 对象

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;