当前位置: 首页 > news >正文

关于Spring Boot IOCDC,看这一篇就够了

一,Spring是什么及常用注解

先说什么是spring,在前面的博客中已经知道了,spring是一个开源框架,为了让我们开发更加简单,那关于ioc呢,一句话概况一下:Spring就是包含了众多工具方法的Ioc容器

注解:

共有两类大注解:

类注解:@Controller、@Service、@Repository、@Component、@Configuration.

⽅法注解:@Bean.

@Controller:控制器存储,控制层,接收请求,对请求进⾏处理,并进⾏响应.

@Service:服务存储,也就是用来存储业务层组件。

@Repository:仓库存储,也称为持久层.负责数据访问操作。

@Component:组件存储,使其能够被Ioc自动扫描识别并管理。

@Configuration:配置存储,处理项⽬中的⼀些配置信息。

@Bean:方法注解,@Bean注解的方法会产生一个Bean对象,该对象由Spring管理并放到IoC容器中。

@Autowired:注入依赖,在Controller层和Service层注⼊运⾏时依赖的对象

二, 什么是Ioc

也就是比如在平常创建对象需要一个一个new,而使用了它之后,就不需要了,交给容器,集中处理,一键完成,方便省事。

Ioc:Inversion of Control  (控制反转)也就是将创建对象的控制权反转到Spring上。

IOC的优点:

1.资源的集中管理,我们需要使用的时候,直接在容器里取就可以了。

2.降低耦合度,不会牵一发而动全身,降低了依赖程度。

也就是我们将一些自己需要创建的东西外包出去,然后使他们来负责,这样即使出了问题,让他们修改就行了,我们也不用整体改了。

三,什么是DI

从上述可以看出IOC在处理的时候,其实也就是一个依赖注入的容器,而依赖注入就是DI。

DI:依赖注入,也就是在容器运行期间,动态的为应用程序提供运行时所依赖的资源。

DI也就是Ioc的一种实现,也就比如今天想出去下馆子,那么下馆子就是IOC,而去吃川菜和粤菜,就是DI。

三,依赖注入

spring依赖注入主要分为三种实现方式:属性注入,构造方法注入,setter注入

3.1属性注入

应用层代码:

@Service
public class UserService {public void doService(){System.out.println("service ...");}
}

控制层代码:

@Controller
public class HelloConteoller {@Autowiredprivate UserService userService;public void sayHi(){userService.doService();System.out.println("HelloConreoller");}

3.2构造方法注入

构造方法是在类的构造方法中实现注入:

控制层代码:

@Controller
public class HelloConteoller {//构造方法注入private UserComponent userComponent;public HelloConteoller(UserService userService){this.userService = userService;}@Autowiredpublic HelloConteoller(UserService userService, UserComponent userComponent){this.userService = userService;this.userComponent = userComponent;}
}

3.3setter方法注入

在设置setter方法的时候要加@Autowired注解。

控制层代码:

@Controller
public class HelloConteoller {// setter方法注入:@Autowiredpublic void setUserService(UserService userService){this.userService = userService;}public void sayHi(){userService.doService();System.out.println("HelloConreoller");}
}

3.4三种方法优缺点

1.属性注入:

优:简洁,方便

缺:只能使用IOC容器,其他不行,不能注入一个Final修饰的属性。

2.构造方法注入:

优:可以注入Final修饰的属性,注入的对象不会被修改,任何框架都可以支持。

缺:注入多个对象要一个一个打代码。

3.setter方法注入

优:在类实例之后,还能对该对象进行配置或者注入。

缺:也不能注入Final修饰的属性,setter方法被多次调用就会有被修改的风险。

相关文章:

关于Spring Boot IOCDC,看这一篇就够了

一,Spring是什么及常用注解 先说什么是spring,在前面的博客中已经知道了,spring是一个开源框架,为了让我们开发更加简单,那关于ioc呢,一句话概况一下:Spring就是包含了众多工具方法的Ioc容器 …...

Model Import Settings

前言 在可视化3D世界中,模型是3D世界的核心,你可以没有贴图,可以没有特效,甚至可以没有用户交互界面,但必须得有模型来描述世界的基本样貌。 在3D世界中,由点线面构成了模型的轮廓;由UV和纹理&a…...

腾讯云COS托管静态网站,以及如何解决访问出现了下载网页的情况

腾讯云对象存储(Cloud Object Storage,简称COS),与其他云厂商所提供的云对象存储都是面向非结构化数据,只是每个云厂商的叫法有别于他家,或许是更能彰显厂商的品牌吧! 但不管云厂商怎么给云对象…...

软件设计模式: 抽象工厂

抽象工厂 一、解决的问题 抽象工厂模式主要解决了在具有多个产品族的情况下,如何统一管理创建相关产品对象的问题。 当系统需要创建一系列相互关联或相互依赖的对象,并且这些对象可以形成多个不同的产品族时,如果直接由客户端去分别创建这…...

使用Vuepress搭建个人网站

网站地址:bloggo.chat...

lua 写一个 不同时区之间转换日期和时间 函数

这个函数用于调整时间戳以适应不同的时区。它接受五个参数:format、timeStamp、dontFixForTimeOffset、currentServerTimeZone和showLog。返回 os.date,可以转化成指定格式的年月日时间 ### 功能 该函数的主要功能是根据给定的时区偏移量调整时间戳&am…...

谷粒商城——session共享

问题1 一个系统中不同微服务的session共享。 问题1的解决办法 1. session复制的方法:微服务的副本之间通过通信共享session。这样每一个微服务的副本都会保存所有的session。(缺点:造成大量的通信,多处额外的通信开销。&#x…...

Java 语言及其常用集合类的操作,以及反射机制与注解

目录 一、Java 语言概述 二、Java 集合框架 ArrayList 操作示例: HashMap 操作示例: 三、反射机制 1. 反射的示例 五、总结 Java 是一种广泛使用的高级编程语言,因其平台独立性、简洁性及丰富的 API 而备受开发者青睐。 一、Java 语言…...

《系统架构设计师教程(第2版)》第12章-信息系统架构设计理论与实践-02-信息系统架构

文章目录 1. 概述1.1 信息系统架构(ISA)1.2 架构风格 2. 信息系统架构分类2.1 信息系统物理结构2.1.1 集中式结构2.1.2 分布式结构 2.2 信息系统的逻辑结构1)横向综合2)纵向综合3)纵横综合 3. 信息系统架构的一般原理4…...

用html做python教程01

用html做python教程01 前言开肝构思实操额外修饰更换字体自适应 最后 前言 今天打开csdn的时候,看见csdn给我推荐了一个python技能书。 说实话,做得真不错。再看看我自己,有亿点差距😟。 开肝 先创建一个文件,后缀…...

PHP接口与性状的优雅应用

本文由 ChatMoney团队出品 在PHP编程中,接口是一种定义对象之间交互契约的强大工具。其核心目的不是让一个对象紧耦合地依赖另一个对象的特定身份,而是基于另一对象的能力进行交互。通过接口,我们的代码可以实现与依赖的解耦,从而…...

R语言模型评估网格搜索

### 网格搜索 ### install.packages("gbm") set.seed(1234) library(caret) library(gbm) fitControl <- trainControl(method = repeatedcv,number = 10,repeats = 5) # 设置网格搜索的参数池 gbmGrid <- expand.grid(interaction.depth = c(3,5,9),n.trees =…...

Haproxy服务

目录 一.haproxy介绍 1.主要特点和功能 2.haproxy 调度算法 3.haproxy 与nginx 和lvs的区别 二.安装 haproxy 服务 1. yum安装 2.第三方rpm 安装 3.编译安装haproxy 三.配置文件详解 1.官方地址配置文件官方帮助文档 2.HAProxy 的配置文件haproxy.cfg由两大部分组成&…...

Unity VR开发入门:探索虚拟现实世界的无限可能

目录 引言 Unity VR开发基础 1. 安装Unity与VR SDK 2. 创建VR项目 3. 理解VR场景结构 Unity VR开发实战 1. 场景搭建 2. 交互设计 创建C#脚本 编写VRInteractor脚本 应用脚本到场景 注意 修改VRInteractor脚本 3. 用户体验优化 4. 测试与调试 引言 随着科技的飞速…...

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.2 业务处理系统-解读

教材中,一会儿“业务处理系统”,一会儿“事务处理系统”,语法毛病一堆。真是清华的水平!!! 系统架构设计师教程 第3章 信息系统基础知识-3.2 业务处理系统 3.2.1 业务处理系统的概念3.2.2 业务处理系统的功能3.2.2.1 数据输入3.2.2.2 数据处理3.2.2.2.1 批处理 (Batch …...

32_ConvNeXt网络详解

1.1 简介 ConvNeXt是一种计算机视觉模型&#xff0c;由Meta AI&#xff08;前Facebook AI&#xff09;的研究人员在2022年提出&#xff0c;它旨在探索卷积神经网络&#xff08;CNN&#xff09;在图像识别任务上的潜力&#xff0c;尤其是在与当时流行的Vision Transformer&…...

Langchain[3]:Langchain架构演进与功能扩展:流式事件处理、事件过滤机制、回调传播策略及装饰器应用

Langchain[3]:Langchain架构演进与功能扩展&#xff1a;流式事件处理、事件过滤机制、回调传播策略及装饰器应用 1. Langchain的演变 v0.1: 初始版本&#xff0c;包含基本功能。 从0.1~0.2完成的特性&#xff1a; 通过事件流 API 提供更好的流式支持。标准化工具调用支持Tool…...

java导出PDF详细教程+各种踩坑

直接上代码了 所需依赖: <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.4.3</version> </dependency><dependency><groupId>com.itextpdf</groupId><art…...

【博士每天一篇文献-算法】连续学习算法之HNet:Continual learning with hypernetworks

阅读时间&#xff1a;2023-12-26 1 介绍 年份&#xff1a;2019 作者&#xff1a;Johannes von Oswald&#xff0c;Google Research&#xff1b;Christian Henning&#xff0c;EthonAI AG&#xff1b;Benjamin F. Grewe&#xff0c;苏黎世联邦理工学院神经信息学研究所 期刊&a…...

使用 tcpdump 进行网络流量捕获与分析

目录 安装 tcpdump基本用法捕获网络流量指定网络接口捕获特定主机的流量捕获特定端口的流量捕获特定协议的流量 常用选项保存捕获的数据包从文件读取数据包显示数据包内容指定捕获数据包的长度限制捕获的数据包数量显示详细信息过滤表达式 示例捕获本地回环接口上的HTTP流量捕获…...

TranslucentTB终极配置指南:轻松打造个性化Windows任务栏透明效果

TranslucentTB终极配置指南&#xff1a;轻松打造个性化Windows任务栏透明效果 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Translucen…...

Qwen3-ASR-0.6B惊艳效果:藏语、维吾尔语等少数民族语言识别案例

Qwen3-ASR-0.6B惊艳效果&#xff1a;藏语、维吾尔语等少数民族语言识别案例 1. 引言&#xff1a;多语言语音识别的突破 语音识别技术正在改变我们与设备交互的方式&#xff0c;但有一个领域一直存在巨大挑战——少数民族语言的识别。传统的语音识别模型往往只支持主流语言&am…...

【Java】UTF-8变长编码及其3字节存储奥秘

UTF-8 是一种变长编码&#xff0c;一个字符可能由 1 到 4 个字节组成。 解码时&#xff08;将字节数组转回 String&#xff09;&#xff0c;计算机并不需要“猜”或者去查表&#xff0c;因为长度信息本身就包含在字节的“头部”里。这就是 UTF-8 设计的精妙之处&#xff1a;它是…...

2026权威评测:盘点毕业论文AIGC免费降重神器

【CSDN 资深算法架构师 / NLP技术专栏 导读】 各位还在发际线边缘挣扎的应届生和硕博党们&#xff0c;到了2026年&#xff0c;如果你的电脑里还装着那种老掉牙的“同义词替换”降重软件&#xff0c;我劝你赶紧停手&#xff01; 最近CSDN社群里哀嚎一片&#xff1a;“知网查重过…...

基于MATLAB的模拟退火粒子群算法在含分布式电源配电网多目标优化中的应用

310.基于matlab的模拟退火粒子群算法对含分布式电源的配电网进行多目标优化&#xff0c;目标函数包括总有功网损、总投资与运行成本、电压稳定欲度。 和目标函数相关参数有单位分布式电源投资成本、运行成本&#xff0c;分布式电源设备使用年限、贴现率等。 经过优化得到最佳结…...

Linux Ubuntu 24.04 Server 超简单部署 Fast GPT(新手零踩坑)

前言&#xff1a; Fast GPT 是一款基于大语言模型的知识型平台&#xff0c;支持数据处理、RAG检索、可视化AI工作流编排&#xff0c;能快速搭建专属问答系统&#xff0c;无需复杂开发配置。本文针对 Ubuntu 24.04 Server 系统&#xff0c;用最简洁的步骤完成部署&#xff0c;全…...

HTML网页元素中的图片和超链接

哈哈哈&#xff0c;又来更新我这一周里面新学的web前端开发技术啦&#xff01;今天我将与大家分享网页元素中的图片和超链接。一.图像的应用HTML中加入图片有3种不同的路径&#xff1a;1.绝对路径&#xff1a;是指互联网上唯一且完整的地址&#xff0c;用来精准定位资源。绝对路…...

HBuilderX + 极光推送踩坑实录:免费版为啥息屏收不到通知?手把手教你配置与避坑

HBuilderX与极光推送免费版避坑指南&#xff1a;破解息屏通知失效难题 早上八点&#xff0c;你的咖啡还没喝完&#xff0c;测试组的消息就炸开了锅——"昨晚推送的版本在息屏状态下根本收不到通知&#xff01;"作为使用HBuilderX开发跨平台应用的团队&#xff0c;这个…...

Arduino轻量级哈希表UnorderedMap实战指南

1. 项目概述UnorderedMap是一款专为 Arduino 平台设计的轻量级哈希表&#xff08;Hash Table&#xff09;实现&#xff0c;其核心目标是在资源极度受限的微控制器环境中提供高效、可靠、内存可控的键值对&#xff08;Key-Value Pair&#xff09;存储能力。它并非 C STLstd::uno…...

I2CLCD驱动库:HD44780字符屏的I²C轻量级嵌入式适配方案

1. I2CLCD库概述&#xff1a;面向嵌入式系统的字符型LCD IC适配驱动I2CLCD是一个轻量级、可移植的C语言驱动库&#xff0c;专为将标准HD44780兼容的字符型LCD&#xff08;如1602、2004&#xff09;通过IC总线接入MCU而设计。其核心价值在于消除并行接口对GPIO资源的高占用&…...