Spring01——Spring简介、Spring Framework架构、Spring核心概念、IOC入门案例、DI入门案例

本文主要是介绍Spring01——Spring简介、Spring Framework架构、Spring核心概念、IOC入门案例、DI入门案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为什么要学

  • spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%
  • 专业角度
    • 简化开发:降低企业开发的复杂度
    • 框架整合:高效整合其他技术,提高开发与运行效率

学什么

  • 简化开发
    • IOC
    • AOP
      • 事务处理
  • 框架整合
    • MyBatis

怎么学

  • 学习Spring框架设计思想
  • 学习基础操作,思考:操作与思想之间的联系
  • 学习案例,熟练应用操作的同时体会思想

01-初识spring

  • 官网:https://spring.io/
  • Spring全家桶:Spring发展到今天已经形成了一种开发的生态圈,Spring提供了若干个项目,每个项目用于完成特定的功能
    在这里插入图片描述
    • Spring Framework:全家桶中其他所有的技术都依赖于Spring Framework执行,底层设计性框架,所有技术都能在上面运行
    • Spring Boot:在Spring简化开发的基础上提高开发速度
    • Spring Cloud:分布式开发
      上述三个框架为主要的学习框架

02-Spring Framework系统架构

Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基
系统架构讲究上层依赖于下层

  • Core Container:核心容器
    2. 容器中放对象
  • AOP:面向切面编程,不影响原始程序的基础上做增强功能
    3. Aspect:AOP思想实现
  • Data Access/Integration
    4. Data Access:数据访问
    5. Data Integration:数据集成
    6. Transaction:事务
  • Web:Web开发
    5. springmvc相关
  • Test:单元测试与集成测试
    在这里插入图片描述
    学习路线
    在这里插入图片描述

03-核心概念

代码书写现状:如果想更改数据层的实现,就还得更改业务层new的对象,源代码更改了,就需要重新编译、测试、部署、发布等
在这里插入图片描述
上述问题在于:在类中写了其他的实现,就导致了代码的耦合度偏高
解决方案:使用对象时,在程序中不主动使用new产生对象,转换为由外部提供
在这里插入图片描述
上述思想即为:IOC (Inversion of Control) 控制反转

IOC (Inversion of Control) 控制反转

  • 即:使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转

Spring与IOC的关系、Bean的概念

Spring技术对IOC思想进行了实现

  • Spring提供了一个容器,称为IOC容器(亦称Spring容器),用来充当IOC思想中的“外部
  • IOC容器负责对象的创建、初始化等过程,被创建或管理的对象称为Bean

DI (Dependency Injection) 依赖注入

由于service依赖dao运行,所以在IOC容器中,也将service依赖于dao

  • 于是有:在容器中建立bean与bean之间的依赖关系的整个过程(绑定service与dao之间依赖关系的过程),称为依赖注入
    在这里插入图片描述

如何实现的充分解耦

上述一系列的操作都是为了一个目标:充分解耦

  • 使用IOC容器管理bean (IOC)
  • 在IOC容器内将有依赖关系的bean进行关系绑定 (DI)
    最终效果
  • 使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系

核心概念小结

重点要理解什么是IOC/DI思想、什么是IOC容器和什么是Bean:

  1. 什么IOC/DI思想?
    • IOC:控制反转,控制反转的是对象的创建权
    • DI:依赖注入,绑定对象与对象之间的依赖关系
  2. 什么是IOC容器?
    • Spring创建了一个容器用来存放所创建的对象,这个容器就叫IOC容器
  3. 什么是Bean?
    • 容器中所存放的一个个对象就叫Bean或Bean对象

04-IOC入门案例

IOC入门案例主要介绍:Spring到底是如何来实现IOC的

思路分析

  1. Spring是使用容器来管理bean对象的,那么管什么?
    • 主要管理项目中所使用到的类对象,比如(Service和Dao)
  2. 如何将被管理的对象告知IOC容器?
    • 配置文件
  3. 被管理的对象交给IOC容器,要想从容器中获取对象,就先得思考如何获取到IOC容器?
    • Spring框架提供的相应接口,即:ApplicationContext
  4. IOC容器得到后,如何从容器中获取bean?
    • 调用Spring框架提供对应接口中的方法
  5. 使用Spring导入哪些坐标?
    • 用什么,就在pom.xml中导入相应依赖

代码实现

需求分析:将BookServiceImpl和BookDaoImpl交给Spring管理,并从容器中获取对应的bean对象进行方法调用。

  1. 创建maven项目
    在这里插入图片描述
  2. pom.xml添加Spring的依赖jar包(和junit测试)
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>
  1. 创建BookDao,BookDaoImpl,BookService和BookServiceImpl四个类
@Overridepublic void save() {System.out.println("book dao save");}
public class BookServiceImpl implements BookService {private BookDao bookDao = new BookDaoImpl();@Overridepublic void save() {System.out.println("book service save");bookDao.save();}
}
  1. 在配置文件中完成bean的配置
    在这里插入图片描述
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd"><!--配置bean--><!--bean标签表示配置beanid属性表示给bean起名字class属性表示给bean定义类型得是具体的实现类而不是接口,要靠这个造对象的--><bean id="bookDao" class="com.yolo.dao.impl.BookDaoImpl"/><bean id="bookService" class="com.yolo.service.impl.BookServiceImpl"/></beans>
  1. 获取IOC容器并从容器中获取对象进行方法调用
    使用getBean(String name)方法,其name参数就是我们在bean配置的id,通过这个id来造对象
public class APP {public static void main(String[] args) {// 获取IOC容器ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");// 获取bean对象
//        BookDao bookDao = (BookDao) ac.getBean("bookDao");// 获取到对象后就调用对象方法
//        bookDao.save();BookService bookService = (BookService) ac.getBean("bookService");bookService.save();}
}

运行结果
在这里插入图片描述

05-DI入门案例

DI入门案例主要介绍:Spring到底是如何来实现DI的

思路分析

  1. 要想实现依赖注入,必须要基于IOC管理Bean
    • DI的入门案例要依赖于前面的IOC入门案例
  2. Service中使用new形式创建的Dao对象是否保留?
    • 不保留,这样才能解耦合,最终要使用IOC容器中的bean对象(因为只要有new的实现类,耦合度必然高)
  3. Service中需要的Dao对象如何进入到Service中?
    • 在Service中提供一个方法(例如提供一个set方法),让Spring的IOC容器可以通过该方法传入bean对象,也就达到了不是自己new,而是外部提供
  4. Service与Dao之间的关系如何描述?
    • 使用配置文件

代码实现

需求:基于IOC入门案例,在BookServiceImpl类中删除new对象的方式,使用Spring的DI完成Dao层的注入

  1. 删除业务层中使用new的方式创建的dao对象
// 删除业务层中使用new的方式创建的dao对象// private BookDao bookDao = new BookDaoImpl();private BookDao bookDao;
  1. 在业务层提供BookDao的setter方法
    我们在set方法中加一条输出语句,看看是否被调用了
public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;System.out.println("set方法被容器调用啦");}
  1. 在配置文件中添加依赖注入的配置
	<bean id="bookDao" class="com.yolo.dao.impl.BookDaoImpl"/><!--主要变化在这里--><bean id="bookService" class="com.yolo.service.impl.BookServiceImpl"><!--配置server与dao的关系--><!--property标签表示配置当前bean的属性name属性表示配置哪一个具体的属性(这里是配置bookService的bookDao属性)ref属性表示参照哪一个bean(参照当前配置文件中的bookDao)--><property name="bookDao" ref="bookDao"/></bean>

注意:配置中的两个bookDao的含义是不一样的

name=”bookDao”中bookDao的作用是让Spring的IOC容器在获取到名称后,将首字母大写,前面加set找对应的setBookDao()方法进行对象注入
ref=”bookDao”中bookDao的作用是让Spring能在IOC容器中找到id为bookDao的Bean对象给bookService进行注入

在这里插入图片描述

  1. 运行程序调用方法
    运行结果
    在这里插入图片描述

这篇关于Spring01——Spring简介、Spring Framework架构、Spring核心概念、IOC入门案例、DI入门案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1121749

相关文章

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

Spring Cache注解@Cacheable的九个属性详解

《SpringCache注解@Cacheable的九个属性详解》在@Cacheable注解的使用中,共有9个属性供我们来使用,这9个属性分别是:value、cacheNames、key、key... 目录1.value/cacheNames 属性2.key属性3.keyGeneratjavascriptor

redis在spring boot中异常退出的问题解决方案

《redis在springboot中异常退出的问题解决方案》:本文主要介绍redis在springboot中异常退出的问题解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴... 目录问题:解决 问题根源️ 解决方案1. 异步处理 + 提前ACK(关键步骤)2. 调整Redis消费者组

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

java中XML的使用全过程

《java中XML的使用全过程》:本文主要介绍java中XML的使用全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录什么是XML特点XML作用XML的编写语法基本语法特殊字符编写约束XML的书写格式DTD文档schema文档解析XML的方法​​DOM解析XM

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1