spring学习3-IOC容器和Bean的设置

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: spring学习3-IOC容器和Bean的设置


第三节


依赖注入

DI的全称是Dependency Injection,中文称之为依赖注入。

它与控制反转(IoC)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念。

IOC反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。

DI是IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。相对于 IOC 而言,这种表述更直接。

依赖注入的实现方式

操作流程:

setter注入


IOC 容器在 Spring 中的实现

  • 1)在通过 IOC 容器读取 Bean 的实例之前,需要先将 IOC 容器本身实例化。
  • 2)Spring 提供了 IOC 容器的两种实现方式:
  • BeanFactory:IOC 容器的基本实现,是 Spring 内部的基础设施,是面向Spring 本身的,不是提供给开发人员使用的。
  • ApplicationContext:BeanFactory 的子接口,提供了更多高级特性。面向Spring 的使用者,几乎所有场合都使用 ApplicationContext 而不是底层的BeanFactory

ApplicationContext 的主要实现类

  1. ClassPathXmlApplicationContext:对应类路径下的 XML 格式的配置文件
  2. FileSystemXmlApplicationContext:对应文件系统中的 XML 格式的配置文件
  3. 在初始化时就创建单例的 bean,也可以通过配置的方式指定创建的 Bean 是多实例的

ConfigurableApplicationContext

  1. 是 ApplicationContext 的子接口,包含一些扩展方法
  2. refresh()和 close()让 ApplicationContext 具有启动、关闭和刷新上下文的能力。

WebApplicationContext

  1. 专门为 WEB 应用而准备的,它允许从相对于 WEB 根目录的路径中完成初始化工作

Bean

Bean : Spring容器管理的所有的组件(Java的类)。

Spring管理Bean。

Bean的配置

通过类型获取 bean

  1. 从 IOC 容器中获取 bean 时,除了通过 id 值获取,还可以通过 bean 的类型获取。 HelloWorld helloWorld = cxt.getBean(HelloWorld.class);
  • 如果同一个类型的 bean 在 XML 文件中配置了多个,则获取时会抛出异常,所以同一个类型的 bean 在容器中必须是唯一的。
  1. 或者可以使用另外一个重载的方法,同时指定 bean 的 id 值和类型。
    HelloWorld helloWorld = cxt.getBean(“helloWorld”,HelloWorld.class);

给 bean 的属性赋值

依赖注入的方式

  1. 通过 bean 的 的 setXxx() 方法赋值
  2. 通过 bean 的构造器赋值
  • Spring 自动匹配合适的构造器
<bean id="book" class="com.atguigu.spring.bean.Book" >
<constructor-arg value= "10010"/>
<constructor-arg value= "Book01"/>
<constructor-arg value= "Author01"/>
<constructor-arg value= "20.2"/>
</bean >
  • 通过索引值指定参数位置
<bean id="book" class="com.atguigu.spring.bean.Book" >
<constructor-arg value= "10010" index ="0"/>
<constructor-arg value= "Book01" index ="1"/>
<constructor-arg value= "Author01" index ="2"/>
<constructor-arg value= "20.2" index ="3"/>
</bean >
  • 通过类型区分重载的构造器
<bean id="book" class="com.atguigu.spring.bean.Book" >
<constructor-arg value= "10010" index ="0" type="java.lang.Integer" />
<constructor-arg value= "Book01" index ="1" type="java.lang.String" />
<constructor-arg value= "Author01" index ="2" type="java.lang.String" />
<constructor-arg value= "20.2" index ="3" type="java.lang.Double" />
</bean >

Bean的实例化

  • 有3种方式

构造器实例化


静态工厂方式实例化


实例工厂方式实例化

Bean实例化的具体操作

p名称空间

为了简化 XML 文件的配置,越来越多的 XML 文件采用属性而非子元素配置信息。Spring从2.5版本开始引入了一个新的p命名空间,可以通过元素属性的方式配置Bean的属性。使用 p 命名空间后,基于 XML 的配置方式将进一步简化。

<bean
id="studentSuper"
class="com.atguigu.helloworld.bean.Student"
p:studentId="2002" p:stuName="Jerry2016" p:age="18" />

实操:用spring框架模拟用户登录


声明:此篇笔记是个人学习时总结教材和互联网资料整理而成,仅供学习参考。

目录
打赏
0
0
0
0
36
分享
相关文章
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
164 26
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
101 12
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
94 6
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
92 30
自学软硬件第755 docker容器虚拟化技术youtube视频下载工具
docker容器虚拟化技术有什么用?怎么使用?TubeTube 项目使用youtube视频下载工具
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
课时5:阿里云容器服务:最原生的集成Docker和云服务
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
411 15
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
371 78