0320两种生成bean的方式

news/2025/3/21 21:29:33/文章来源:https://www.cnblogs.com/dhsblogs/p/18785881
两种生成bean的方式
  1. @ComponentScan
    适用场景:适用于扫描同一个项目或包内的类,直接且简单。通过 @ComponentScan,Spring 可以扫描指定包及其子包中的类,并将其注册为 Spring 容器中的 Bean。
    功能:通过注解(如 @Component、@Service、@Repository 等)来标识需要注册到 Spring 容器的类。然后,Spring 会在启动时扫描这些类并自动注册它们。
    优点:简单直接,可以快速注册 Bean,适用于简单项目或较小的应用场景。
    限制:无法与 Spring Boot 的自动配置机制完全兼容。对于大型应用或模块化系统,可能需要更复杂的自动配置机制。
  2. spring.factories
    适用场景:这是 Spring Boot 推荐的自动配置机制,尤其适用于提供自动配置功能的模块或库。它通过 spring.factories 文件来注册自动配置类,可以根据不同条件加载和配置 Bean。
    功能:通过 spring.factories 文件,Spring Boot 可以在启动时自动加载和配置相关的 Bean。自动配置类通常是条件化的(通过 @Conditional 注解),意味着只有满足特定条件时,自动配置才会被激活。
    优点:
    灵活性高:能够根据不同环境或条件判断是否加载配置。
    与 Spring Boot 完全兼容:这是 Spring Boot 的核心配置方式,适合构建模块化、可扩展的应用。
    解耦性:模块可以提供自动配置,而不需要修改应用的启动类。
    适用场景:特别适用于希望提供自动配置的第三方库、插件或者模块。
    总结:
    @ComponentScan 适用于简单场景、项目内部的 Bean 注册,方便直接,但不适合复杂的自动配置场景。
    spring.factories 更适合复杂的自动配置和条件加载,尤其是 Spring Boot 中的自动配置,提供更高的灵活性和解耦性。
    两者都可以用来注册 Bean,但 spring.factories 更适合需要条件加载和自动配置的场景,而 @ComponentScan 更适合常规的 Bean 注册。

比如RedisTemplate,在我的项目中是直接自动注入的,因为是spring自动装配的这个bean,但是我也可以用@configuration和@bean注解来自定义配置这个bean

自动装配 RedisTemplate

如果使用的是 Spring Boot 并且依赖了 spring-boot-starter-data-redisRedisTemplate 会自动装配到你的项目中。Spring Boot 会根据你在 application.propertiesapplication.yml 中的配置来自动配置 RedisTemplate。你只需注入并使用它:

java复制代码@Autowired
private RedisTemplate<String, Object> redisTemplate;

这里,Spring Boot 自动配置了 RedisTemplate,并根据 spring.redis.* 配置项自动填充其参数(如连接工厂等)。

自定义配置 RedisTemplate

如果你需要自定义 RedisTemplate,比如自定义序列化方式、连接池配置等,你可以使用 @Configuration@Bean 注解来手动配置:

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// 自定义序列化方式(例如:JSON 序列化)template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));template.setKeySerializer(new StringRedisSerializer());return template;}
}

在这个自定义配置中,你可以指定自定义的 序列化器(比如使用 Jackson2JsonRedisSerializer 来将对象转换为 JSON)和其他 RedisTemplate 的细节配置。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

协议版iM蓝号检测,批量筛选iMessages数据,无痕检测是否开启iMessage服务

一、实现iMessage数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2…

记录项目调用链路

记录项目调用链路 内容 要理清项目中执行链路的调用关系,可以通过以下工具分类实现,涵盖从代码静态分析到运行时动态追踪的全链路管理:一、代码层调用关系分析 1. 静态代码分析工具PyCallGraph(Python) 生成代码调用关系图,直观展示函数调用链路。 pip install pycallgra…

部署kibana

获取kibana安装包 [root@elk1 ~]# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.28-amd64.deb[root@elk1 ~]# ls kibana-7.17.28-amd64.deb kibana-7.17.28-amd64.deb# 安装kibana [root@elk1 ~]# dpkg -i kibana-7.17.28-amd64.deb 配置kibana [root@elk…

多线程程序设计(四)——Balking

本文摘要了《Java多线程设计模式》一书中提及的 Balking 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 当线程访问的共享数据没有准备好时,就放弃后续的操作。 ◆ 解决方案 在临界区中判断共享…

A preLaunchTaskC/C++:g++.exe 生成活动文件已终止,退出代码为1。找到一个有点呆的bug

之前突然弹出这个问题,百思不得其解,今天突然发现,因为之前顺便命名了一个c++文件用来暂时装代码的,名字叫做a.cpp,编译器编译的过程中会生成一个可执行文件叫做a.exe,就冲突了,太傻了:-(

2025/3/21 【二叉树】二叉树理论基础节笔记

代码随想录 解题过程中二叉树主要有两种形式: 1. 满二叉树2. 完全二叉树 优先级队列其实是一个堆,堆就是一棵完全二叉树,同时保证父子节点的顺序关系。 二、二叉搜索树 三、平衡二叉搜索树

C语言程序实验二

实验任务1:#include <stdio.h> #include <stdlib.h> #include <time.h>#define N 5int main() {int number;int i;srand(time(0));for(i = 0; i<N; ++i){number = rand()%100 +1;printf("20490042%04d\n", number);}return 0;} 问题1:生成一…

智慧工地合规穿戴监测系统

智慧工地合规穿戴监测系统基于计算机视觉的未佩戴安全帽检测算法通过实时视频流分析,可突破人工监管的物理局限,实现724小时全场景覆盖。该技术通过深度学习模型对人体姿态、头部特征进行精准识别,快速定位违规行为,为安全监管提供数据化、智能化的升级路径。核心算法模型采…

停车场立体车库人员滞留报警系统

停车场立体车库人员滞留报警系统采用AI算法,通过大量真实的场景样本训练后,能够在各种应用场景下及时准确的对场景中发生的人员入侵行为发出告警信息。通过对实时视频图像进行智能分析识别,可实现图像全屏周界防护、划定区域周界防护等功能。前端智能AI预警摄像机设备嵌入AI…

解决:按钮被禁用--Popconfirm 气泡确认框仍然可以弹出来展示

按钮被禁用,仍然可以点击,并弹出提示框 <template><a-popconfirmtitle="Are you sure delete this task?"ok-text="Yes"cancel-text="No"@confirm="confirm"@cancel="cancel"> <!-- 按钮被禁用 -->&l…

服务器发送事件(SSE)在现代Web开发中的关键作用

在快速发展的Web开发领域,采用能够增强用户体验并简化数据流的前沿技术对开发者至关重要。服务器发送事件(SSE)正是其中的一项技术。本指南旨在介绍SSE的概念、关键特性、常见应用场景、一个实际的实现示例,并讲解如何使用Apipost调试这些事件。 什么是SSE? 服务器发送事件…

人员非法进入货梯监控报警摄像头

人员非法进入货梯监控报警摄像头对于厂区车间货梯轿厢有人闯入,有很好的预防效果。现场曾发生过货梯运行有员工误进的事件,对安全监控造成严重威胁,对该位置进行实时监控较为重要。货梯监测人员报警摄像机是嵌入AI人体识别算法,对人体的精确检测、跟踪,实现对人体检测分析…