【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取

这篇具有很好参考价值的文章主要介绍了【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring的开发要点总结
【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

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

就不带大家回顾了~

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

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

1. DI 和 DL

1.1 DI 依赖注入

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

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

这就是依赖的注入~

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

1.2 DL 依赖查询

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

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

后面真正进入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项目:

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

2.2 设置国内源

2.2.1 勾选

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

  • 以后的设置一并改了

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

2.2.2 删除本地jar包

之前留下的jar包很有可能,是你没有设置国内源,导致一些jar包不完整,导致后续无法重新向中央仓库下载这些jar包~
【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

delete删除即可:

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

2.2.3 reload

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

耐心等待~

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

这个时间就差不多~

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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上的代码片段上,方便获取

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

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

2.4 创建启动类

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

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

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

3.1 创建一个Bean对象

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,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>
  • 直接复制过去即可

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

爆红的话,reload一下~

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

3.2.2 包含一个bean标签
  1. id
    • 将对象存储到IoC容器中的名字

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

创建一个包

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

把UserService拖进去

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

  • 包名.类名
    【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java
两个对象~

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

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

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

3.3 获取Bean对象并使用

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

3.3.1 获取Spring的上下文对象

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

法1:ApplicationContext

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

法2:BeanFactory
【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

上下文对象:

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

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

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

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

但是运行时错误:

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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();
}

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

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

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

注释一些代码:

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

运行:

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java
对于ApplicationContext,是一种全加载的方式


【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java
对于BeanFactory,则是一种懒加载的方式

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

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

区别:

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

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取,JavaEE,java-ee,spring,java

因此,ApplicationContext拥有更多的功能

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

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


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

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

可见,这样子做,获得一个对象太麻烦了,下一篇文章教你简单的存储和获取Bean对象,并且结合DI~文章来源地址https://www.toymoban.com/news/detail-587783.html


到了这里,关于【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 控制:对于成员变量赋值的控制权 反转控制:把对于成员变量赋值的控制权,从代码中反转(转移)到Spring工厂和配置文件中。 好处:解耦合

    2024年02月05日
    浏览(32)
  • 【JavaEE进阶】 Spring使用注解存储对象

    在博主前面所写的《【JavaEE进阶】 Spring 的创建和使⽤》中我们已经可以实现基本的 Spring 读取和存储对象的操作了,但在操作的过程中我们发现读取和存储对象并没有想象中的那么“简单”,所以接下来我们要学习更加简单的操作 Bean 对象的⽅法。 在 Spring 中想要更简单的存

    2024年02月05日
    浏览(36)
  • spring中存储和获取bean对象

    存储 Bean 分为以下 2 步: 存储 Bean 之前,先得有 Bean 才⾏,因此先要创建⼀个 Bean, 说白了也就是写一个类。 告诉spring,把这个类的对象存起来。 编写 User 类, 有 sayHi 方法。 告诉 spring ,把这个类的对象存起来。 在配置文件中可以通过 bean 标签来告诉 spring 把对象存起来。

    2024年02月15日
    浏览(34)
  • Spring中Bean对象的存储与读取

    在项目的 pom.xml 中添加 Spring 支持 如何选定版本环境:打开官网,点击github图标 jdk8最后一个Spring版本是5.3.x,Spring6.0.x最低需要jdk17 版本冲突问题Maven自己处理 version : 可以选择带有 RELEASE结尾或者纯数字结尾,这样的版本更稳定 项目下创建一个main方法的启动类 存储 Bean 之前

    2024年01月24日
    浏览(29)
  • 【Spring】使用注解读取和存储Bean对象

     哈喽,哈喽,大家好~ 我是你们的老朋友: 保护小周ღ    谈起Java 圈子里的框架,最年长最耀眼的莫过于 Spring 框架啦,本期给大家带来的是:  将对象存储到 Spring 中、Bean 对象的命名规则、从Spring 中获取bean 对象、注入的、@Autowired 与 @Resource 的区别、解决@Bean 方

    2024年02月13日
    浏览(38)
  • Spring——更快捷的存储 / 获取Bean对象

    本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话,互关一下,以后互相学习,共同进步。这篇文章能够帮助到你的话,劳请大家点赞转发支持一下! 上篇文章中,向Spring容器中添加对象,还要去配置文件里手动添

    2024年02月15日
    浏览(34)
  • 【Spring】(三)Spring 使用注解存储和读取 Bean对象

    前面的文章详细的介绍了 Spring 对象的创建,以及对 Bean 对象的存取操作,但是通过配置文件注册 Bean 对象以及使用 ApplicationContext 或 BeanFactory 的方式获取 Bean 对象的操作就显得格外的复杂。因此,本文主要就是详细介绍了一种更加简单的方式来实现对 Bean 对象更加简单的储

    2024年02月14日
    浏览(28)
  • Spring更简单的存储和读取Bean对象

    目录 1.第一个Spring项目 2.存储Bean对象 2.1 准备工作 2.2 五大类注解 2.3 方法注解@Bean 2.4 Bean对象的默认命名规则 3. 读取Bean对象 3.1 属性注入 3.2 setter注入 3.3 构造方法注入 3.4 注入异常问题 3.5 注入方式优缺点 3.6 @Autowired和@Resource的区别 在学习更简单的方式来读取和存储Bean对象

    2024年02月03日
    浏览(38)
  • 【JavaEE进阶】Spring 更简单的读取和存储对象

    配置扫描路径是使用注解之前的前置工作,是非常重要的,是必须的操作项.只有被配置的包下的所有类,添加了注解才能被正确的识别并保存到 Spring 中. 首先创建一个Spring项目.创建好后,第一步就是配置扫描路径:在 resources 目录中创建一个 spring-config.xml 文件.然后在 spring-config.

    2024年02月12日
    浏览(32)
  • JavaEE 突击 5 - Spring 更简单的读取和存储对象(2)

    大家新年快乐 , 祝大家新的一年如图 这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领

    2024年02月19日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包