Spring-Ioc,Di,Bean

news/2024/12/22 11:25:32/
  • 博客主页:音符犹如代码
  • 系列专栏:JavaWeb
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

目录

IOC

DI

Bean


在上一期我们给大家讲解了三层架构和分层解耦,这次给大家注重的讲解一下控制反转和依赖注入,Bean对象等知识点

控制反转:Inversion of Control,简称 IoC,在控制反转中。对象之间的创建和管理都应由自身转到外部的框架或容器来负责

依赖注入:Dependency Injection,简称 DI,它是实现控制反转的一种常见方式,它指容器为应用程序运行时,讲一个对象所依赖的其他对象动态的注入到该对象中。

Bean:IOC容器中创建管理的对象

如果我们要是实现一个案例比如:Service层及 Dao层的实现类,交给I0C容器管理,
为Controller及Service注入运行时,依赖的对象。

首先把Service层以及Dao层的实现类,交给IOC容器管理

然后为Controller及Service注入运行时要依赖的对象

Service:

java">@Component //加入这个注解
public class UserServiceImpl implements UserService {private UserDao userDao;@Autowiredpublic UserServiceImpl(UserDao userDao) {this.userDao = userDao;}@Overridepublic void registerUser(User user) {// 业务逻辑处理userDao.saveUser(user);}
}

Dao:

java">@Component
public class UserDaoImpl implements UserDao {@Overridepublic void saveUser(User user) {// 模拟保存用户的数据库操作System.out.println("Saving user: " + user.getName());}
}

Controller:

java">@RestController
public class UserController {private UserService userService;@Autowiredpublic UserController(UserService userService) {this.userService = userService;}@PostMapping("/register")public void register(@RequestBody User user) {userService.registerUser(user);}
}

Bean的声明

要把某个对象交给ioc容器管理的时候,需要在对应的类上加上注解

注解介绍使用
@Component声明bean的基础注解通用注解,任何类
@Controller@Component的衍生注解标识控制器类
@Service@Component的衍生注解标识服务层的类
@Repository@Component的衍生注解标识数据访问层的类

注意:

声明bean的时候我们可以通过value指定bean的名字,如果没有指定名字,那默认的类名首字母是小写的

使用上边四个注解都可以声明bean,但是在springboot中声明控制器类的bean只能用@Controller这个注解

Bean的注入

在 Spring 框架中,Bean 的注入(Dependency Injection)是指将一个 Bean 所依赖的其他 Bean 自动地注入到当前 Bean 中,以满足其运行时的需求

在Bean的注入中我们最常用的就是@Autowired这个注解,但是如果我们存在多个相同的bean而都用的@Autowired就会报错,所以我们就会用其他的注解方式来解决这些问题

@Primary

java">@Primary
@Service
public calss EmpService{
}

@Autowired+@Qualifier(“bean的名称”)

java">@RestController
public class EmpController{
@Autowired
@Qualifier("empService")
private EmpService empService;
}

@Resource(name=“bean的名称”)

java">@RestController
public class EmpController{
@Resource(name = "empServiceA")
private EmpService empService;
}

@Resource和@Autowired他俩是有区别的

@Autowired它是由spring框架提供的注解,而@Resource他是java中jdk中提供的注解

@Resource是按照名称注入的,@Autowired它是按照类型注入


http://www.ppmy.cn/news/1503589.html

相关文章

嵌入式学习Day19---Linux软件编程

目录 一、标准I/O 1.1.fseek 1.偏移量 2.实例 ​编辑 1.2.ftell 2.实例 ​编辑 二、文件I/O 2.1.打开文件 1.open 2.2.实例 2.2.读写文件 1.write 实例 ​编辑 2.read 实例 2.3.关闭文件 1.close 2.3.lseek 实例 三、标准I/O与文件I/O的区别 3.1.区别 四、其…

【软件建模与设计】-07-静态建模

目录 1、类之间关系 1.1、关联 1.1.1、关联的多重性 1.1.2、三元关联 1.1.3、一元关联 1.1.4、关联类 2、组合与聚合层次 2.1、组合 2.2、聚合 3、泛化/特化层次 4、约束 5、静态建模和UML 5.1、问题域的静态建模 6、系统上下文的静态建模 7、使用UML构造型对类…

PostgreSQL——查询扫描介绍

顺序扫描 概述 顺序扫描(Sequential Scan)是PostgreSQL中一种基本的数据检索方式,它通过按顺序读取表中的所有页面来查找满足查询条件的记录。这种方式不依赖于索引,因此在某些情况下可能是唯一的选择,尤其是当表没有…

轻松入门Linux—CentOS,直接拿捏 —/— <5>

一、Linux常用工具 1、tar打包命令详解 当 tar 命令用于打包操作时,该命令的基本格式为: tar [选项] 源文件或目录 常用选项: 1.1 打包文件 例如,我有几个文件,将他们打包成一个文件,以tar结尾的后缀名 …

C++ 列式内存布局数据存储格式 Arrow

Apache Arrow 优点 : 高性能数据处理: Arrow 使用列式内存布局,这特别适合于数据分析和查询操作,因为它允许对数据进行高效批量处理,减少CPU缓存未命中,从而提升处理速度。 零拷贝数据共享: Arrow …

Java中的BIO,NIO与操作系统IO模型的区分

Java中的IO模型 Java中的BIO,NIO,AIO概念可以是针对输入输出流,文件,和网络编程等其他IO操作的。 但是主要还是在网络编程通信过程中比较重要,因为很多情况网络编程需要它们来提供更好的性能。 所以本篇文章偏向于网络…

java~反射

反射 使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码) 原理图 加载完类后,在堆中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对…

Kotlin中的Any 类详解

Kotlin 中的 ANY 类详解 在 Kotlin 中,Any 类是 Kotlin 类继承层次结构的根。每个 Kotlin 类都继承自 Any。它等同于 Java 中的 Object,但有一些关键差异和额外的功能。 Kotlin 中 Any 的关键点 继承: Kotlin 中的每个类都直接或间接地继承自…