【Spring】获取Bean对象需要哪些注解

news/2024/12/22 10:09:09/

8e19eee2be5648b78d93fbff2488137b.png

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:@Service(服务存储)

1:存储bean的代码

2:读取bean的代码

3:运行结果 

二:@Repository(仓库存储)

1:存储bean的代码

 2:读取bean的代码

3:运行结果 

三:@Component(组件存储)

1:存储bean的代码

2:读取bean的代码

3:运行结果 

​编辑

四:@Configuration(配置存储)

1:存储bean的代码

2:读取bean的代码

3:运行结果 

五:为什么需要这些不同的注解

1:注解的特点

(1)元注解@Component:

(2)源码分析

2:注解分类的优点

3:调用流程


引入:在上一篇文章中,我简单的认识了IoC容器和DI依赖注入,控制反转的基本原理,使用@Controller存储bean对象,以及三种获取bean对象的方式。本篇文章,将继续对bean对象的存储五大注解进行展开

一:@Service(服务存储)

1:存储bean的代码

java">@Service
public class UserService {public void sayHi(String name) {System.out.println("Hi," + name);}
}

2:读取bean的代码

java">@SpringBootApplication
public class SpringIocDemoApplication {public static void main(String[] args) {
//获取Spring上下⽂对象ApplicationContext context =SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring中获取UserService对象UserService userService = context.getBean(UserService.class);
//使⽤对象userService.sayHi();}
}

3:运行结果 

二:@Repository(仓库存储)

1:存储bean的代码

java">@Repository
public class UserRepository {public void sayHi() {System.out.println("Hi, UserRepository~");}
}

 2:读取bean的代码

java">@SpringBootApplication
public class SpringIocDemoApplication {public static void main(String[] args) {
//获取Spring上下⽂对象ApplicationContext context =SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring上下⽂中获取对象UserRepository userRepository = context.getBean(UserRepository.class);
//使⽤对象userRepository.sayHi();}
}

3:运行结果 

三:@Component(组件存储)

1:存储bean的代码

java">@Component
public class UserComponent {public void sayHi() {System.out.println("Hi, UserComponent~");}
}

2:读取bean的代码

java">@SpringBootApplication
public class SpringIocDemoApplication {public static void main(String[] args) {
//获取Spring上下⽂对象ApplicationContext context =SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring上下⽂中获取对象UserComponent userComponent = context.getBean(UserComponent.class);
//使⽤对象userComponent.sayHi();}
}

3:运行结果 

四:@Configuration(配置存储)

1:存储bean的代码

java">@Configuration
public class UserConfiguration {public void sayHi() {System.out.println("Hi,UserConfiguration~");}
}

2:读取bean的代码

java">@SpringBootApplicationpublic class SpringIocDemoApplication {public static void main(String[] args) {
//获取Spring上下⽂对象ApplicationContext context =SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring上下⽂中获取对象UserConfiguration userConfiguration =context.getBean(UserConfiguration.class);
//使⽤对象userConfiguration.sayHi();}
}

3:运行结果 

五:为什么需要这些不同的注解

从上面的代码不难看出,这些注解的本质都是一样的,把对象交给Spring来管理,只是名称不同,那么它们各自都有什么特点呢?

1:注解的特点

(1)元注解@Component:

@Component是⼀个元注解,也就是说可以注解其他类注解,以下的这几个注解都是它的衍生注解。

@Controller:控制层。接收请求,对请求进行处理,并返回响应

@Service:业务逻辑层,主要处理具体的业务逻辑

@Repository:数据访问层,也叫持久层。主要负责数据的访问操作

@Configuration:配置层。处理项目中一些配置信息

(2)源码分析

以上的衍生注解⾥⾯都有⼀个注解@Component ,说明它们本⾝就是属于@Component 的"⼦类".

2:注解分类的优点

@Controller , @Service 和@Repository ⽤于更具体的⽤例,在开发过程中,如果你要在业务逻辑层使⽤ @Component 或@Service,显然@Service是更好的选择

⽐如杯⼦有喝⽔杯,刷⽛杯等,但是我们更倾向于在⽇常喝⽔时使⽤⽔杯,洗漱时使⽤刷⽛杯.

这样分类的好处,不仅提高了代码的可读性,而且在处理复杂项目的时候,可以更好的对项目进行分层。就像你不能一口吃个胖子,得有条理有规划的吃。

3:调用流程


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

相关文章

校园点餐订餐外卖跑腿Java源码

简介: 一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合&am…

前端零基础学习Day-Eight

CSS字体和文本样式 CSS文字样式 字体:font-family 语法:font-family:[字体1][,字体2][,…] p{font-family:“微软雅黑”,“宋体”,“黑体”;} 含空格字体名和中文,用英文引号括起 属性值:具体字体名,字体集 字体集&…

网络安全概论——防火墙原理与设计

一、防火墙概述 防火墙是一种装置,它是由软件/硬件设备组合而成,通常处于企业的内部局域网与 Internet 之间,限制 Internet 用户对内部网络的访问以及管理内部用户访问 Internet 的权限。换言之,一个防火墙在一个被认为是安全和可…

怎么给git动图扣除背景?

环境: Wn10 专业版 python 问题描述: 怎么给git动图扣除背景? 解决方案: 要将一个 GIF 动图的尺寸改为 50x50 并且把黑色背景改成透明,您可以使用 Python 的 Pillow 库。Pillow 支持处理静态图像和动画 GIF。下面…

【考前预习】4.计算机网络—网络层

往期推荐 【考前预习】3.计算机网络—数据链路层-CSDN博客 【考前预习】2.计算机网络—物理层-CSDN博客 【考前预习】1.计算机网络概述-CSDN博客 目录 1.网络层概述 2.网络层提供的两种服务 3.分类编址的IPV4 4.无分类编址的IPV4—CIDR 5.IPV4地址应用规划 5.1使用定长子…

C++学习路程-7-C++标准库

C标准库概述 C标准库是C语言的一部分,提供了一系列的类、函数和模板,旨在简化编程过程,提高代码的可读性和可维护性。它的主要组成部分包括输入/输出库、容器库、算法库、字符串处理库、时间和日期库、多线程库和文件输入输出库等。 1. 输入…

使用ioredis在Node.js中操作Redis数据结构的详细指南

使用ioredis在Node.js中操作Redis数据结构的详细指南 一. 使用ioredis操作Redis数据结构的详细知识点讲解 在Node.js中,ioredis是一个强大且易于使用的Redis客户端库,它提供了对Redis数据库的直接操作。本文将通过一系列代码示例,详细解释如…

Flutter 多个弹窗关闭指定弹窗

前言 大家都知道Flutter的页面是堆栈式管理,通常关闭页面是最后进入的最先关闭,通过pop进行一个退栈操作。 但是我碰到一个问题,有时需要在同一页面上显示多个弹窗。如果此时需要关闭指定的某一个弹窗,那退栈操作明显不合适了&a…