依赖注入方式

依赖注入方式

  • 思考:向一个类中传递数据的方式有几种?
    • 普通方法(set方法)
    • 构造方法
  • 思考:依赖注入描述了在容器中建立bean与bean之间关系依赖的过程,如果bean运行需要的是数字或字符串呢?
    • 引用类型
    • 简单类型(基本数据类型与String)
  • 依赖注入方式
    • setter注入
      • 引用类型
      • 简单类型
    • 构造器注入
      • 引用类型
      • 简单类型
setter注入(引用类型)
  • 在bean中定义引用类型属性并提供可访问的set方法
    在这里插入图片描述

  • 配置中使用property标签ref属性注入引用类型对象

在这里插入图片描述

setter注入(简单类型)
  • 在bean中定义引用类型属性并提供可访问的set方法
    在这里插入图片描述

  • 配置中使用property标签value属性注入简单类型数据

在这里插入图片描述

构造器注入(引用类型)(了解)
  • 在bean中定义引用类型属性并提供可访问的构造方法
    在这里插入图片描述

  • 配置中使用constructor-arg标签ref属性注入引用类型对象

在这里插入图片描述

构造器注入(简单类型)(了解)
  • 在bean中定义引用类型属性并提供可访问的set方法

在这里插入图片描述

  • 配置中使用constructor-arg标签value属性注入简单类型数据

在这里插入图片描述

构造器注入(参数适配)(了解)
  • 配置中使用constructor-arg标签type属性设置按形参类型注入
    在这里插入图片描述

  • 配置中使用constructor-arg标签index属性设置按形参位置注入

在这里插入图片描述

依赖注入方式选择

  1. 强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现
  2. 可选依赖使用setter注入进行,灵活性强
  3. Spring框架倡导使用构造器,第三方框架内部大多数采用构造注入的形式进行数据初始化,相对严谨
  4. 如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入
  5. 实际开发过程中还需要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入
  6. 自己开发的模块推荐使用setter注入

在这里插入图片描述

依赖自动装配

  • IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配

  • 自动装配方式

    • 按类型(常用)
    • 按名称
    • 按构造方法
    • 不启用自动装配
  • 配置中使用bean标签autowire属性设置自动装配的类型

在这里插入图片描述

依赖自动装配特征

  • 自动装配用于引用类型依赖注入,不能对简单类型进行操作
  • 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
  • 使用按名称装配时(byName)必须保障容器中具有指定的名称bean,因变量名与配置耦合,不推荐使用
  • 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

集合注入

  • 注入数组对象
    在这里插入图片描述

  • 注入List对象(重点)
    在这里插入图片描述

  • 注入Set对象

在这里插入图片描述

  • 注入Map对象(重点)
    在这里插入图片描述

  • 注入Properties对象

在这里插入图片描述

案例:数据源对象管理(第三方资源配置管理)

  • 导入druid坐标
    在这里插入图片描述

  • 配置数据源对象作为spring管理的bean

在这里插入图片描述

在这里插入图片描述

加载properties文件

  • 开启context命名空间

在这里插入图片描述

  • 使用context命名空间,加载指定properties文件
    在这里插入图片描述

  • 使用${}读取加载的属性值
    在这里插入图片描述

  • 不加载系统属性
    在这里插入图片描述

  • 加载多个properties文件

在这里插入图片描述

  • 加载所有properties文件

在这里插入图片描述

  • 加载properties文件标准格式

在这里插入图片描述

  • 从类路径或jar包中搜索并加载properties文件
    在这里插入图片描述

在这里插入图片描述

创建容器

  • 方式一:类路径加载配置文件

在这里插入图片描述

  • 方式二:文件路径加载配置文件

在这里插入图片描述

  • 加载多个配置文件

在这里插入图片描述

获取bean

  • 方式一:使用bean名称获取

在这里插入图片描述

  • 方式二:使用bean名称获取并指定类型

在这里插入图片描述

  • 方式三:使用bean类型获取

在这里插入图片描述

容器类层次结构图

在这里插入图片描述

BeanFactory初始化

  • 类路径加载配置文件

在这里插入图片描述

  • BeanFactory创建完成后,所有的bean均为延迟加载

小结

在这里插入图片描述

核心容器总结

容器相关
  • BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载
  • ApplicationContext接口是Spring容器的核心接口,初始化时bean立即加载
  • ApplicationContext接口提供基础的bean操作相关方法,通过其他接口扩展其功能
  • ApplicationContext接口常用初始化类
    • ClassPathXmlApplicationContext
    • FileSystemXmlApplicationContext
bean相关

在这里插入图片描述

依赖注入相关

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于STM32的无线传感器网络(WSN)通信方案设计与实现

无线传感器网络(Wireless Sensor Network,简称WSN)是由一组分布式的无线传感器节点组成的网络,用于监测和收集环境中的各类物理信息。本文将基于STM32微控制器,设计并实现一个简单的无线传感器网络通信方案&#xff0c…

Linux安装OpenCV并配置VSCode环境

Linux安装OpenCV并配置VSCode环境 安装OpenCV环境安装必需工具下载并解压OpenCV库(Opencv Core Modules和opencv_contrib)创建构建目录,进行构建验证构建结果安装验证安装结果 配置VSCode环境创建项目文件修改配置信息执行程序 安装环境 Ubun…

2023解析企业数据中台:突破数据孤岛,实现数据化管理升级-亿发

当前,各大企业纷纷将业务中台、数据中台、安全中台等纳入建设计划,其中,数据中台被视为重中之重。但是,对于初接触者而言,对数据中台的定义可能存在一些模糊。 下面我们将讨论和讲解对企业建设数据中台的3点建议&#…

vulnhub靶机Momentum2

下载地址:https://download.vulnhub.com/momentum/Momentum2.ova 主机发现 端口扫描 端口服务扫描 漏洞扫描 先去看看web 这里面没有什么,就顺手扫一下目录 发现一些可疑的目录 比较正常 再看一下有没有别的web 看到几个新的东西去看看 文件上传 啥都没…

【学习笔记】Java安全之动态加载字节码

文章目录 什么是Java的字节码利用URLClassLoader加载远程class文件利用ClassLoader#defineClass直接加载字节码利用TemplatesImpl加载字节码利用BCEL ClassLoader加载字节码 最近在学习Phith0n师傅的知识星球的Java安全漫谈系列,随手记下笔记 什么是Java的字节码 J…

[PHP]关联和操作MySQL数据库然后将数据库部署到ECS

在Mac电脑上使用VS Code进行PHP开发并关联操作MySQL数据库,然后将数据库部署到ECS。 1.安装PHP和MySQL 确保你的Mac上已经安装了PHP和MySQL。你可以使用Homebrew来安装它们: $ brew install php $ brew install mysql 安装mysql完成后记住这一句: …

css继承属性

在css中,继承是指的是给父元素设置一些属性,后代元素会自动拥有这些属性 关于继承属性,可以分成: 字体系列属性文本系列属性元素可见性表格布局属性列表属性引用光标属性 继承中比较特殊的几点: a 标签的字体颜色不…

RMI协议详解

前言特点应用示例存在的问题应用场景拓展 前言 RMI(Remote Method Invocation,远程方法调用)是Java中的一种远程通信协议,用于实现跨网络的对象方法调用。RMI协议基于Java的分布式计算,可以让客户端程序调用远程服务器…

异常

文章目录 概念体系结构分类处理抛异常捕获异常throws 异常声明try-catch 异常捕获finally 异常处理流程自定义异常 概念 在Java中,将程序执行过程中发生的不正常行为称为异常。 比如: 算术异常 Exception in thread "main" java.lang.ArithmeticExcept…

Unity——URP相机详解

2021版本URP项目下的相机,一般新建一个相机有如下组件 1:Render Type(渲染类型) 有Base和Overlay两种选项,默认是Base选项 Base:主相机使用该种渲染方式,负责渲染场景中的主要图形元素 Overlay(叠加):使用了Oveylay的…

NewStarCTF2023 Reverse Week3---Let‘s Go Wp

分析 程序打开后结合题目可以发现是 GO语言。 在GO语言中,main_init 要先于 main 函数运行。 在这里对一个iv做了处理。 用插件Signsrch发现AES加密 知道是AES后,就需要找密文,key和iv了。 密文应该就是前面的十六进制字符串。 key和i…

汇编-间接寻址(处理数组)

直接寻址很少用于数组处理,因为用常数偏移量来寻址多个数组元素时,直接寻址并不实用。取而代之的是使用寄存器作为指针(称为间接寻址(indirect addressing) ) 并控制该寄存器的值。如果一个操作数使用的是间接寻址, 就称之为间接操作数(indie…