Spring框架——IOC、DI

news2024/10/5 11:14:42

本篇博客主要介绍Java中的IOC和DI,以及在String框架中的应用。首先,我们将对IOC和DI进行概念介绍,然后讲解它们的关系及在String框架中的应用,最后通过一个实例来展示它们的具体用法。

IOC和DI的概念介绍

  • IOC(Inverse of Control)即控制反转,它将对象的创建和依赖注入的过程由程序员手动控制转化为由容器自动创建和注入。
  • DI(Dependency Injection)即依赖注入,它是IOC的一种实现方式,通过容器自动将所需的依赖注入到需要它们的对象中,从而实现对象之间的解耦。

IOC和DI的关系及在Spring框架中的应用

  • IOC和DI是紧密相关的,IOC通过将对象的创建和依赖注入的控制权交给容器,实现了依赖注入。
  • Spring框架是一个轻量级的IOC容器,通过使用DI实现对象之间的解耦,从而使应用程序更加灵活、可扩展、易维护。
  • 在Spring框架中,容器会自动管理对象之间的依赖关系,从而实现了依赖注入。Spring提供了多种方式来进行依赖注入,包括构造器注入、Setter注入、字段注入等。

示例代码

我们可以通过一个实例来展示IOC和DI的具体用法。假设我们有一个UserService和一个UserRepository,UserService需要依赖UserRepository来完成其业务逻辑,我们可以使用Spring的依赖注入来实现它们之间的解耦。

1.创建项目,导入spring的jar包

 2.按照如下目录结构创建接口及其实现类,做好准备工作

 servlet层

public class BookServlet {
    BookService bookService;
    @Test
    public void add() {
        System.out.println("BookServlet...add");
        bookService.save();
    }
}

service层

//接口
public interface BookService {
    void save();
}
//实现类
public class BookServiceImpl implements BookService {
    private BookDao bookDao;
    private String name;

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    public void setName(String name) {
        this.name = name;
    }
    @Override
    public void save() {
        System.out.println("BookServiceImpl...save");
        bookDao.insert();
    }
}

dao层

//接口
public interface BookDao {
    public void insert();
}
//实现类
public class BookDaoImpl implements BookDao {
    @Override
    public void insert() {
        System.out.println("BookDaoImpl...save");
    }
}

3.使用spring完成IOC的配置和DI依赖注入

<?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">
    <!--把所有对象创建到spring的IOC容器中,并起上名字
        id:表示给对象起名字
        class:类的全类名
    -->
<bean id="bookDao" class="com.chen.dao.impl.BookDaoImpl"></bean>

<bean id="bookService" class="com.chen.service.impl.BookServiceImpl">
    <!--spring的依赖注入:property表示BookServiceImpl的属性,常规属性使用value赋值,
类型属性使用ref引用-->
        <property name="name" value="张三"/>
        <property name="bookDao" ref="bookDao"/>
    </bean>
</beans>

注意:BookServiceImpl需要给bookDao属性设置setter方法,框架才能自动注入

运行结果如下:

总结

        IoC和DI是Spring框架的核心概念,它们可以帮助我们管理对象的生命周期和依赖关系。Spring框架提供了强大的IoC容器和DI机制,可以帮助我们更轻松地开发Java应用程序。在本篇博客中,我们介绍了IoC和DI的概念,以及如何在Java应用程序中使用Spring框架实现它们。

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

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

相关文章

热更新方案 HybridCLR 学习教程 |(一)原理及准备工作

文章目录 热更新方案 HybridCLR 学习教程(一)HybridCLR原理及准备工作前言一、学前准备1.1 资源下载1.2 文档参考学习二、关于HybridCLR2.1 HybridCLR特性:2.2 HybridCLR工作原理2.3 与其他流行的c#热更新方案的区别2.4 兼容性2.5 原理流程介绍三、快速上手(重要)3.1 体验…

Linux下实现的 HTTP 服务器

项目功能&#xff1a;&#xff08;1&#xff09;能接收客户端的GET请求&#xff1b;&#xff08;2&#xff09;能够解析客户端的请求报文&#xff0c;根据客户端要求找到相应的资源&#xff1b;&#xff08;2&#xff09;能够回复http应答报文&#xff1b;&#xff08;3&#x…

MySQL实验四:数据更新

MySQL实验四&#xff1a;数据更新 目录MySQL实验四&#xff1a;数据更新导读表结构sql建表语句模型图1、 SQL更新&#xff1a;将所有学生的年龄增加1岁代码2、SQL更新&#xff1a;修改“高等数学”课程倒数三名成绩&#xff0c;在原来分数上减5分代码解析3、SQl更新&#xff1a…

docker详解

一、docker相关命令 1、docker进程相关命令 启动docker服务&#xff1a;systemctl start docker 停止docker服务&#xff1a;systemctl stop docker 重启docker服务&#xff1a;systemctl restart docker 查看docker服务状态&#xff1a;systemctl status docker 设置…

可变形卷积(Deformable Conv)原理解析与torch代码实现

1. 可变形卷积原理解析 1.1 普通卷积原理 传统的卷积操作是将特征图分成一个个与卷积核大小相同的部分&#xff0c;然后进行卷积操作&#xff0c;每部分在特征图上的位置都是固定的。 图1 普通卷积过程 图1所示为普通卷积在输入特征图上进行卷积计算的过程&#xff0c;卷积核…

4.3-4.4学习总结

文章目录 目录 文章目录 1.集合的概念 2.Set集合 1.HashSet类 2.LinkedHashSet类 3.TreeSet类 4.EnumSet类 一、Java集合 1.集合的概念 Java集合类是一种特别有用的工具类 , 可用于存贮数量不等的对象 , 并可以实现经常用的数据结构 , 同时集合还可用于保存具有映射关系的关…

小波变换在脑电数据处理中的特征工程

导读在生物信号中&#xff0c;高效的特征工程和特征提取(FE)是获得最优结果的必要条件。特征可以从时域、频域和时频域三个方面进行提取。时频域特征是最先进的特征&#xff0c;在大多数基于人工智能的信号分析问题中表现良好。本文介绍了小波散射变换(WST)在神经疾病分类中的应…

2023美赛春季赛A题思路数据代码论文分享

文章目录赛题思路赛题详情参赛建议&#xff08;个人见解&#xff09;选择队友及任务分配问题&#xff08;重要程度&#xff1a;5星&#xff09;2023美赛春季赛A题思路数据代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片&#xff0c;加入获取…

高效便捷构造 Http 请求

Http 请求构造 如何构造http请求 对于Get请求: 地址栏直接输入点击收藏夹html 中的 link script img a…form 标签 这里我们重点强调 form 标签构造的 http请求 使用 form 标签构造http请求. <!-- 表单标签, 允许用户和服务器之间交互数据 --><form action"ht…

SpringBoot 项目的创建与启动

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

腾讯最热门的 10 款前端开源项目

作为国内知名的互联网公司&#xff0c;腾讯在前端领域做出了很多开源贡献。本文就来盘点腾讯最热门的 10 款前端开源项目&#xff01; wujie 无界微前端是一款基于 Web Components iframe 微前端框架&#xff0c;具备成本低、速度快、原生隔离、功能强等一系列优点。其能够完…

【ChatGPT】教你搭建多任务模型

ChatGPT教你搭建多任务模型 You: tell me what’s your version of gpt ? ChatGPT: As an AI language model developed by OpenAI, I am based on the GPT (Generative Pretrained Transformer) architecture. However, my version is known as GPT-3.5, which is an updat…

【云原生】:用Kubernetes部署MySQL、SpringCloud、Nacos实现高可用

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 文章目录一、 建立Kubernetes集群1. 安装和配置Kubernetes master节点1.1 安装Docker和Kubernetes1.2 初始化master节点…

Spring事务(2)-EnableTransactionManagement实现源码解析

Transactional注解 Transactional是spring中声明式事务管理的注解配置方式。Transactional注解可以帮助我们标注事务开启、提交、者回滚、事务传播、事务隔离、超时时间等操作。 而EnableTransactionManagement是开启Spring 事务的入口。 EnableTransactionManagement 标注启…

《SpringBoot篇》26.SpringBoot整合Jackson超详细教程(附Jackson工具类)

陈老老老板&#x1f9b8;&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;SpringBoot篇&#xff08;主要讲一些与springboot整合相关的内容&#xff09;&#x1f468;‍&#x1f4bb;本文简述&#xff1a;本文讲一下Jackson常见用法&#xff0c;超级详细。&#x1f468;‍&am…

100天精通Python丨办公效率篇 —— 11、Python自动化操作 Email(发送邮件、收邮件、邮箱客户端)

文章目录一、通过SMTP发送电子邮件1.1 定义邮件正文1.2 发送邮件二、收取电子邮件2.1 配置账户信息2.2 连接邮箱服务器2.3 搜索返回消息ID2.4 读取邮件三、使用邮件客户端发送邮件大家好&#xff0c;我是你们的好朋友西红柿&#xff01;今天咱们聊一聊关于Python怎么操作邮件的…

IP协议以及相关技术

这里写目录标题前言正文IP基本认识IP的作用IP和MAC的关系IP地址的基础知识IP地址定义IP地址分类(IPv4)无分类IP地址CIDR子网掩码IPv6基础知识相关技术DNS域名解析ARPDHCPNATICMPIGMP总结参考连接前言 大家好&#xff0c;我是练习两年半的Java练习生&#xff0c;今天我们来讲一…

TypeScript(八)装饰器

目录 前言 定义 类装饰器 基本用法 操作方式 操作类的原型 类继承操作 方法装饰器 属性装饰器 存取器装饰器 参数装饰器 基本用法 参数过滤器 元数据函数实现 参数过滤 效果实践 装饰器优先级 相同装饰器 不同装饰器 装饰器工厂 hooks与class兼容 结语 …

电子的普线图、能级图,能量吸收和共振

一、圆形电子轨道谱线 光谱产生的原因&#xff1a;原子中的电子在轨道上发生跃迁。如莱曼系为电子从n2,3,4等轨道跃迁到n1的基态轨道产生。 圆形电子轨道&#xff1a;中心的圆点为原子核&#xff0c;中心最接近原子核为n1的电子轨道&#xff0c;轨道大小正比于n的平方。如下图…

NoSQL数据库简介

NoSQL代表“不仅是SQL”&#xff0c;指的是一种数据库管理系统&#xff0c;旨在处理大量非结构化和半结构化数据。与使用具有预定义架构的表格格式的传统SQL数据库不同&#xff0c;NoSQL数据库是无模式的&#xff0c;并且允许灵活和动态的数据结构。 NoSQL数据库是必需的&…