【JavaEE】Spring的开发要点总结(1)

news2024/11/26 0:31:27

Spring的开发要点总结
在这里插入图片描述

文章目录

  • 【JavaEE】Spring的开发要点总结(1)
    • 1. DI 和 DL
      • 1.1 DI 依赖注入
      • 1.2 DL 依赖查询
      • 1.3 DI 与 DL的区别
      • 1.4 IoC 与 DI/DL 的区别
    • 2. Spring项目的创建
      • 2.1 创建Maven项目
      • 2.2 设置国内源
        • 2.2.1 勾选
        • 2.2.2 删除本地jar包
        • 2.2.3 reload
      • 2.3 添加依赖
      • 2.4 创建启动类
    • 3. 将Bean对象存储到Spring(IoC容器)中
      • 3.1 创建一个Bean对象
      • 3.2 将Bean对象存储到Spring中
        • 3.2.1 配置文件
        • 3.2.2 包含一个bean标签
      • 3.3 获取Bean对象并使用
        • 3.3.1 获取Spring的上下文对象
        • 3.3.2 通过Spring的上下文对象,获取一个指定的Bean对象
        • 3.3.3 使用Bean对象
        • 3.3.4 验证懒加载-两种获取Bean对象的方法的区别

【JavaEE】Spring的开发要点总结(1)

Spring的初步了解博客:【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识_s:103的博客-CSDN博客

就不带大家回顾了~

从框架获取的对象称为获取【Bean对象】!

Java是咖啡,Bean就是"咖啡豆",也就是“对象”

咖啡豆 的图像结果

Spring项目开发就是 开业放咖啡豆到罐子里后续从罐子里拿咖啡豆结合豆子用咖啡机做咖啡咖啡给用户喝,的过程~

1. DI 和 DL

1.1 DI 依赖注入

在Spring项目中,DI通常指的是Dependency Injection(依赖注入)。Spring框架是一个使用DI作为核心思想的开源框架,它通过依赖注入的方式管理和注入对象之间的依赖关系。

指的是,在程序运行期间动态地将“依赖对象”获取到的过程

在这里插入图片描述

以Framework构造方法为例,需要一个依赖对象“bottom”,那么就在运行的时候,动态地在框架内部去查询到对应地Bean对象,然后赋值给bottom

这就是依赖的注入~

后面真正进入Spring代码的学习的时候,会有更好的理解!

1.2 DL 依赖查询

在Spring项目中,DL通常指的是Dependency Lookup(依赖查找)。Dependency Lookup 是一种在运行时通过容器来查找和获取依赖对象的方式。

DL与DI不同的最大一点就是,DL显式的去从框架内部获取Bean对象,然后自己去赋值给对应的对象:

在这里插入图片描述

后面真正进入Spring代码的学习的时候,会有更好的理解!

1.3 DI 与 DL的区别

  1. 静态与动态
    • DI 是在对象创建时将依赖注入到对象中
    • 而DL 是在运行时通过容器查找和获取依赖对象。
  2. 控制权
    • DI 将控制权交给容器,在对象创建时由容器负责注入依赖对象
    • 而 DL 则由代码显式调用容器的方法来获取依赖对象,控制权更多地在代码手中。
  3. 依赖关系的表达
    • DI 的依赖关系通过构造函数、Setter方法或注解等方式在类的定义中表达
    • 而 DL 则需要在代码中显式地调用容器的方法来获取依赖对象。
  4. 灵活性
    • DI 可以更方便地进行单元测试和模拟依赖对象,因为依赖对象可以通过构造函数或 Setter 方法注入
    • 而 DL 则需要运行时访问容器,不太适合在测试环境中进行模拟。
  5. 松耦合与紧耦合
    • DI 通过将依赖对象注入到类中实现了松耦合,对象不需要关心如何获取依赖
    • 而 DL 则需要显式地调用容器方法来获取依赖,导致对象与容器之间紧密耦合。

后面真正进入Spring代码的学习的时候,会有更好的理解!

1.4 IoC 与 DI/DL 的区别

IoC是“目标”的一种思想,而IoC就是只是“指导原则”,“Spring的基本思想”

DI/DL则是“落实的方案”,就属于“Spring特点的具体实现”

IoC是控制权的反转,“向框架要对象”,那么Bean对象是怎么给我们的,就是DI/DL

接下来就要创建Spring项目了,(配置国内源哦,在上一篇文章中有提到~)

2. Spring项目的创建

2.1 创建Maven项目

Spring项目的基础就是Maven项目:

在这里插入图片描述

然后输入创建目录,确认:

在这里插入图片描述

2.2 设置国内源

2.2.1 勾选

在这里插入图片描述

在这里插入图片描述

  • 以后的设置一并改了

在这里插入图片描述

2.2.2 删除本地jar包

之前留下的jar包很有可能,是你没有设置国内源,导致一些jar包不完整,导致后续无法重新向中央仓库下载这些jar包~
在这里插入图片描述

在这里插入图片描述

delete删除即可:

在这里插入图片描述

2.2.3 reload

在这里插入图片描述

在这里插入图片描述

耐心等待~

在这里插入图片描述

这个时间就差不多~

在这里插入图片描述

2.3 添加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.3.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.2.3.RELEASE</version>
    </dependency>
</dependencies>
  • 建议把这些常用的依赖放在git上的代码片段上,方便获取

在这里插入图片描述

  • 这里版本号后面是release也没问题~
  • 因为国内源里确实存在~

添加的框架有 spring-context:spring 上下文,还有 spring-beans:管理对象的模块

2.4 创建启动类

在这里插入图片描述

项目的运行的就是main方法~

  • 很多知识要到后面才能理解哦,一步步来!

3. 将Bean对象存储到Spring(IoC容器)中

3.1 创建一个Bean对象

一个Bean对象,无非就是java中的一个普通的类的一个实例罢了~

在这里插入图片描述

3.2 将Bean对象存储到Spring中

3.2.1 配置文件

这个时候就需要一个配置文件:

<?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">

</beans>
  • 直接复制过去即可

在这里插入图片描述

  • resources就是放一些配置文件的~
  • 取名规则:写实,直观,表达文件内容含义

爆红的话,reload一下~

在这里插入图片描述

3.2.2 包含一个bean标签

  1. id
    • 将对象存储到IoC容器中的名字

在这里插入图片描述

  1. class
    • 要存储到IoC中的Bean的完整路径

在这里插入图片描述

创建一个包

在这里插入图片描述

把UserService拖进去

在这里插入图片描述

默认是不分组的,去掉这个√,就分组了

在这里插入图片描述

而bean标签的class属性,就是类的路径~

  • 包名.类名
    在这里插入图片描述

在这里插入图片描述
两个对象~

这一步虽然看似我们将这个类的对象放进Spring中,但是只起到“声明”的作用~

因为IoC容器加载对象,如果是懒汉模式,即是非必要不加载,所以这一步就是声明,对象在容器中的“名字”和“位置”

所以代码在运行的过程中加载才会通过这个配置文件,将Bean放进容器中~

3.3 获取Bean对象并使用

获取和使用都在启动类的main方法中~

3.3.1 获取Spring的上下文对象

没有题词很正常,打出来就行了,然后导包

法1:ApplicationContext

在这里插入图片描述

  • 用单词全称的好处就是,打错字会有提醒~

法2:BeanFactory
在这里插入图片描述

两种方式都能获取,区别在后面讲解~

上下文对象:

  1. 上下文(Context)在一般语境下指的是某个事件、问题或情况发生的背景和环境。它是指在特定的时间、地点或条件下所处的整体情况、状态或背景。
  2. 上下文对象是指在特定环境中包含了相关信息和状态的对象。它提供了在该环境中执行操作所需的上下文信息。

在这里的话,就是蕴含了容器存储的Bean对象的信息~

不好理解上下文对象,那你就理解成,IoC容器管理器~

3.3.2 通过Spring的上下文对象,获取一个指定的Bean对象

在这里插入图片描述

  • 这里填的就是Bean对象的名字,也就是在配置文件中的id~

但是这个方法返回的结果是Object类型,需要强制类型转化:

在这里插入图片描述

在这里插入图片描述

或者,用类对象作为参数:

  • 返回这个类的一个Bean对象

在这里插入图片描述

但是运行时错误:

在这里插入图片描述

字面意思就是,不唯一Bean定义异常

在这里插入图片描述

确实如此,有两个UserService的Bean对象

最好的一种方法就是,传两个参数,一个id,一个类对象:

在这里插入图片描述

3.3.3 使用Bean对象

public static void main(String[] args) {
    //1. 得到Spring的上下文对象
    ApplicationContext applicationContext =
        new ClassPathXmlApplicationContext("spring-config.xml");
    //2. 得到Bean
//  UserService userService = (UserService) applicationContext.getBean("user");
    UserService userService = applicationContext.getBean("user", UserService.class);

    //3. 使用Bean
    userService.sayHi();
}

在这里插入图片描述

3.3.4 验证懒加载-两种获取Bean对象的方法的区别

我们在UserService的构造方法上添上一笔

在这里插入图片描述

注释一些代码:

在这里插入图片描述

运行:

在这里插入图片描述
对于ApplicationContext,是一种全加载的方式


在这里插入图片描述
对于BeanFactory,则是一种懒加载的方式

所以我们在回答问题的时候要这样:

相同点:都是容器的管理对象,都能获取Bean对象

区别:

  1. ApplicationContext是BeanFactory的一个子类(子孙之一)

在这里插入图片描述

因此,ApplicationContext拥有更多的功能

  1. 国际化支持
  2. 资源访问支持
  3. 事件传播支持
  1. 加载机制不同
    • BeanFactory,比较老,在之前资源匮乏,所以要珍惜资源,所以懒加载可以节省资源
      • 启动快,后期的获取慢
    • ApplicationContext,则是现在资源不成问题,配置文件全部一起加载也无妨~
      • 启动慢,后期的获取快

而以上IoC机制的实现,就是DL,依赖查找的方式,就是通过给定的配置文件,在配置文件中的beans里查找Bean对象的声明,找到对象并返回~


文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

本文代码链接:SpringDemo1 · 游离态/马拉圈2023年7月 - 码云 - 开源中国 (gitee.com)

可见,这样子做,获得一个对象太麻烦了,下一篇文章教你简单的存储和获取Bean对象,并且结合DI~


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

战略、组织、人才和生态,数字化转型如何破局?

导语 |在数字科技时代&#xff0c;企业在进行数字化转型时&#xff0c;面对快速变化的市场环境&#xff0c;在顶层设计、组织模式、人才模型以及合作生态等方面应如何调整以突出重围&#xff0c;获得长远发展&#xff1f;今天&#xff0c;我们特邀了旭辉集团副总裁兼首席数字官…

zabbix 企业级级监控(2) 监控linux主机

目录 配置开始 Zabbix添加linux主机 4.为agent.zabbix.com添加模板 环境&#xff1a; &#xff08;隔天做的更换了IP&#xff0c;不影响实际操作&#xff09; IP 192.168.50.50 关闭防火墙规则 更改主机名 [rootlocalhost ~]# vim /etc/hostname agent.zabbix.com [rootloca…

C 知识积累 替换gets函数 Linux C 语法分析 switch和if else的比较

目录 替换gets函数gets()用处gets()的危险之处gets()的几种替代方法一、用%c循环输入直到遇到换行结束二、用getchar()循环输入直到遇到换行结束三、scanf的另一种用法四、c中的getline()方法五、解决方案使用fgets代替 回车与换行一.知其然二.知其所以然 关键字&#xff0c;操…

餐饮业油烟在线监测系统的具体应用 安科瑞 许敏

摘要&#xff1a;本文利用物联网技术&#xff0c;构建了一套餐饮企业智能油烟在线监测系统&#xff0c;该系统前台由厨房端和管道端组成&#xff0c;通过网关接入云平台管理系统&#xff0c;实时监控烟道阀门的启闭、变频风机的启停与风速及功率调节、油烟浓度数据等。结合动态…

SpringAMQP使用

说明&#xff1a;SpringAMQP&#xff08;官网&#xff1a;https://spring.io/projects/spring-amqp&#xff09;是基于RabbitMQ封装的一套模板&#xff0c;并利用了SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。安装和原始使用参考&#xff1a;http://t.csdn.cn…

Python(二十二)运算符——算术运算符

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

centos7.6下安装mysql

1.下载yum源&#xff1a; wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm2.执行安装&#xff1a; rpm -ivh mysql80-community-release-el7-5.noarch.rpm3.开始安装 yum install -y mysql-server4.启动mysql服务 systemctl start mysqld5.查看…

JavaWeb课程设计项目实战(03)——开发准备工作

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 在正式进入项目开发之前请先完成以下准备工作。 数据库语句 请创建数据库和表并完成数据初始化工作。 初始化数据库 请在MySQL数据库中创建名为studentinformationmanag…

Vue-组件基础(下)

一、目标 能够知道如何对props进行验证能够知道如何使用计算属性能够知道如何为组件自定义事件能够知道如何在组件上使用v-model 二、目录 props验证计算属性自定义事件组件上的v-model任务列表案例 props验证 1.什么是props验证 指的是&#xff1a;在封装组件时对外界传递…

关于GPT、AI绘画、AI提词器等AI技术的探讨

目前的AI潮流非常火热&#xff0c;CHATGPT可谓是目前大模型人工智能的代表&#xff0c;刚开始听说chatGPT可以写代码&#xff0c;写作&#xff0c;写方案&#xff0c;无所不能。还有AI绘画也很&#xff2e;&#xff22;作为一个程序员&#xff0c;为了体验这些&#xff21;&…

医院检验科LIS系统源码 检验申请、标本编号、联机采集、中文报告单的生成与打印、质控图的绘制和数据的检索与备份

LIS通过将所有仪器自身提供的端口与科室LIS系统中的工作站点连接&#xff0c;通过LIS实现与医院HIS系统的联网。是一套符合医院检验科实际需要的管理系统&#xff0c;实现检验业务全流程的计算机管理。从检验申请、标本编号、联机采集、中文报告单的生成与打印、质控图的绘制和…

基于微信小程序的求职招聘系统设计与实现(Java+spring boot+MySQL+微信小程序)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于微信小程序的求职招聘系统设计与实现&#xff08;Javaspring bootMySQL微信小程序&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java s…

Shikra:新一代多模态大语言模型,理解指向,说出坐标

“ Shikra&#xff1a;解锁多模态语言模型参考对话的魔法” Shikra和用户的对话案例 在人类的日常交流中&#xff0c;经常会关注场景中的不同区域或物体&#xff0c;双方都可以通过说话并指向这些区域来进行高效的信息交换。我们将这种对话模式称为参考对话&#xff08;Referen…

关系型数据库设计规则

目录 1.1 表、记录、字段 1.2 表的关联关系 1.2.1 一对一关联&#xff08;one-to-one&#xff09; 1.2.2 一对多关系&#xff08;one-to-many&#xff09; 1.2.3 多对多&#xff08;many-to-many&#xff09; 1.2.4 自我引用&#xff08;Self reference&#xff09; 关系…

第13讲:剖析 Trace 在 SkyWalking 中的落地实现方案(下)

TraceSegmentRef TraceSegment 中除了 Span 之外&#xff0c;还有另一个需要介绍的重要依赖 —— TraceSegmentRef&#xff0c;TraceSegment 通过 refs 集合记录父 TraceSegment 的信息&#xff0c;它的核心字段大概可以分为 3 类&#xff1a; 父 Span 信息traceSegmentId&am…

嵌入式工程师常用的软件工具推荐

前言&#xff1a;常言道&#xff1a;工欲善其事&#xff0c;必先利其器。作为一名合格的嵌入式工程师&#xff0c;日常可能需要接触和处理各种奇奇怪怪的问题&#xff0c;这时候一款高适配性的工具将会令工作效率大大提升。作者根据个人的实际使用情况与粉丝的客观感受&#xf…

在第二代SpringCloud中配置网关组件

我们接着上次的微服务的项目继续搭建网关组件: 搭建微服务项目 前提准备: 1.打开nacos服务注册中心,在浏览器通过这地址访问 http://10.48.185.7:8848/nacos/index.html 2.启动page和product的微服务 1.新建一个网关的项目 2.导入pom依赖 <!-- Spring Boot父启动器…

mysql中的Innodb_buffer_pool_reads和Innodb_buffer_pool_read_requests

Innodb_buffer_pool_reads和Innodb_buffer_pool_read_requests是什么&#xff1f; mysql服务器维护了很多状态变量&#xff08;status variables),这些变量提供了其相关操作的信息。 我们可以通过SHOW [GLOBAL | SESSION] STATUS 查看这些变量以及变量值。这些变量有很多&…

window 命令笔记

1.查看端口 输入“netstat -ano”并回车可以获得所有网络连接活动的列表&#xff0c;在表中&#xff0c;本地地址IP地址后方冒号之后的即是端口号&#xff1a; 如果想要查找特定的端口可以输入命令“netstat -aon|findstr “端口号””&#xff0c;例如“netstat -aon|findstr…

基于IPC-CFX的点对点通信C#

IPC-CFX有两种主要的通信方式&#xff0c;可以通过RabbitMQ发布和订阅&#xff0c;也可以通过request和response进行点对点的通信&#xff0c;本文主要讲的是点对点的通信方式。 在vscode里建立新的dotnet项目&#xff0c;可以通过终端输入dotnet new console来建立&#xff0c…