spring中的@bean注解详解
在Spring框架中,@Bean
注解是用于显式声明一个Bean的核心方式之一,尤其在基于Java的配置中。Spring框架中的@Bean
注解实现原理涉及多个核心机制,包括配置类解析、Bean定义注册、动态代理及依赖注入等
一、@Bean
注解的作用
@Bean
用于标注在方法上,表示该方法返回的对象应由Spring容器管理,成为一个Bean。它通常与@Configuration
类配合使用,替代传统的XML配置方式,提供更灵活的Bean定义。
关键特性:
-
显式声明Bean:将任意对象(包括第三方库的类)纳入Spring容器。
-
控制Bean的创建逻辑:可在方法中编写自定义初始化代码。
-
支持依赖注入:方法参数自动注入其他Bean。
-
生命周期管理:指定初始化和销毁方法。
二、@Bean
的基本用法
- 在配置类中定义Bean
@Configuration
public class AppConfig {@Beanpublic DataSource dataSource() {// 自定义数据源配置return new HikariDataSource();}@Beanpublic UserService userService(UserRepository userRepository) {// 依赖注入UserRepositoryreturn new UserServiceImpl(userRepository);}
}
-
@Configuration
:标记类为配置类,Spring会代理其方法以确保Bean的单例性。 -
方法名默认作为Bean名称(可通过
name
属性修改)。
三、@Bean
注解的属性
属性 | 说明 |
---|---|
name / value | 定义Bean的名称(默认使用方法名)。例如:@Bean("myBean") 。 |
initMethod | 指定Bean初始化后调用的方法。 |
destroyMethod | 指定Bean销毁前调用的方法(默认自动检测close 或shutdown 方法)。 |
autowire | 已弃用,Spring 5+推荐使用构造器或Setter注入。 |
四、@Bean
注解的原理
1. 配置类的解析与Bean定义生成
步骤说明:
-
触发时机:Spring容器启动时,
ConfigurationClassPostProcessor
(后处理器)扫描所有@Configuration
类。 -
解析过程:
- 识别配置类:通过
@Configuration
或@Component
(隐式配置)标记的类。 - 解析
@Bean
方法:遍历类中所有@Bean
注解的方法,生成对应的BeanDefinition
。 - 注册Bean定义:将生成的
BeanDefinition
注册到BeanFactory
的BeanDefinitionRegistry
中。
- 识别配置类:通过
源码关键点:
-
ConfigurationClassParser
解析配置类,提取@Bean
方法。 -
ConfigurationClassBeanDefinitionReader
将方法转换为BeanDefinition
,并注册到容器。
2. 动态代理确保单例行为(仅限@Configuration类)
步骤说明:
-
CGLIB代理:
@Configuration
类会被CGLIB增强,生成代理子类。 -
单例保护:代理类拦截
@Bean
方法的调用,确保多次调用返回同一实例(单例模式)。@Configuration public class AppConfig {@Beanpublic DataSource dataSource() {// 实际仅执行一次,后续调用返回代理结果return new HikariDataSource();} }
源码关键点:
-
ConfigurationClassEnhancer
通过CGLIB生成代理类。 -
代理逻辑在
BeanMethodInterceptor
中实现,拦截方法调用并缓存结果。
3. Bean实例化与依赖注入
步骤说明:
-
实例化时机:当容器首次请求Bean时(或预初始化时),调用
@Bean
方法创建实例。 -
依赖注入:
-
方法参数注入:通过
AutowiredAnnotationBeanPostProcessor
解析方法参数,从容器中获取依赖Bean。 -
属性注入:若方法体内需要其他Bean,可通过
@Autowired
或直接调用applicationContext.getBean()
(不推荐)。
-
示例代码:
@Bean
public ServiceA serviceA(Repository repo) { // 参数repo自动注入return new ServiceA(repo);
}
源码关键点:
-
SimpleInstantiationStrategy
负责调用@Bean
方法。 -
DependencyDescriptor
解析方法参数依赖。
4. 生命周期管理
步骤说明:
-
初始化方法:通过
@Bean(initMethod = "init")
指定,在Bean实例化后调用。 -
销毁方法:通过
@Bean(destroyMethod = "cleanup")
指定,在容器关闭时调用。 -
与接口的结合:若Bean实现
InitializingBean
或DisposableBean
,Spring会自动调用其生命周期方法。
源码关键点:
-
InitDestroyAnnotationBeanPostProcessor
处理自定义初始化和销毁方法。 -
DisposableBeanAdapter
在容器关闭时触发销毁逻辑。
5. 条件化注册与作用域控制
步骤说明:
-
条件化注册:通过
@Conditional
系列注解(如@ConditionalOnClass
)控制Bean是否注册。@Bean @ConditionalOnProperty(name = "db.enabled", havingValue = "true") public DataSource dataSource() {return new HikariDataSource(); }
-
作用域控制:通过
@Scope
指定Bean的作用域(如prototype
、request
)。@Bean @Scope("prototype") public PrototypeBean prototypeBean() {return new PrototypeBean(); }
源码关键点:
-
ConditionEvaluator
在注册前检查条件是否满足。 -
Scope
接口实现类(如SingletonScope
、PrototypeScope
)管理Bean实例的生命周期。
6. 与非@Configuration类的区别
行为差异:
-
普通类中的@Bean方法(如
@Component
类):-
无CGLIB代理,多次调用方法会创建新实例。
-
依赖需通过
@Autowired
注入字段,而非方法参数。
-
-
@Configuration类中的@Bean方法:
- 代理确保单例,方法参数自动注入。
示例对比:
@Component
public class ComponentConfig {@Beanpublic DataSource dataSource() {// 每次调用生成新实例(非单例)return new HikariDataSource();}
}
总结:@Bean注解的核心实现流程
- 配置类解析:由
ConfigurationClassPostProcessor
处理@Configuration
类,提取@Bean
方法。 - Bean定义注册:将方法转换为
BeanDefinition
并注册到容器。 - 动态代理增强:对
@Configuration
类生成CGLIB代理,确保单例行为。 - 实例化与依赖注入:调用
@Bean
方法创建实例,自动注入参数依赖。 - 生命周期管理:执行初始化/销毁方法,结合Spring的标准生命周期接口。
通过这一机制,@Bean
注解实现了灵活、可控的Bean定义方式,尤其适用于整合第三方库或需要复杂初始化的场景。
五、与其他注解的配合
- 作用域控制:
@Scope
@Bean
@Scope("prototype") // 每次请求新实例
public MyPrototypeBean myPrototypeBean() {return new MyPrototypeBean();
}
- 条件化注册:
@Conditional
@Bean
@ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
public FeatureService featureService() {return new FeatureServiceImpl();
}
- 主候选Bean:
@Primary
@Bean
@Primary
public DataSource primaryDataSource() {// 当存在多个DataSource时,优先使用此Beanreturn new HikariDataSource();
}
六、@Bean
与@Component
的区别
特性 | @Bean | @Component |
---|---|---|
应用位置 | 方法上 | 类上 |
适用场景 | 第三方库的类、需自定义初始化的对象 | 自定义类(直接由Spring实例化) |
控制粒度 | 更灵活(可在方法中编写逻辑) | 较简单(自动扫描+默认构造器) |
依赖注入方式 | 通过方法参数显式声明 | 通过@Autowired 隐式注入 |
七、@Bean
的依赖注入
在@Bean
方法中,参数会自动注入容器中已存在的Bean:
@Bean
public ServiceA serviceA(Repository repo, @Value("${config.value}") String value) {return new ServiceA(repo, value);
}
- 支持参数注入:Spring自动将
Repository
类型的Bean和配置属性注入。
八、生命周期方法示例
public class MyBean {public void init() {System.out.println("Bean初始化完成");}public void cleanup() {System.out.println("Bean即将销毁");}
}@Configuration
public class AppConfig {@Bean(initMethod = "init", destroyMethod = "cleanup")public MyBean myBean() {return new MyBean();}
}
九、常见问题及最佳实践
- 配置类的代理问题
-
@Configuration
类:通过CGLIB代理,确保多次调用@Bean
方法返回同一实例。 -
@Component
类中的@Bean
:无代理,每次调用方法会创建新实例(需避免直接调用方法)。
- 处理第三方库的Bean
@Bean
public RestTemplate restTemplate() {RestTemplate restTemplate = new RestTemplate();restTemplate.setConnectTimeout(5000);return restTemplate;
}
- 避免循环依赖
确保@Bean
方法的依赖顺序正确,或使用Setter注入打破循环。
十、总结
-
@Bean
的核心价值:灵活控制Bean的创建过程,整合非Spring管理的类。 -
适用场景:配置数据源、工具类(如RestTemplate)、需要复杂初始化的对象。
-
关键点:方法参数注入、作用域控制、生命周期管理。
通过合理使用@Bean
,开发者可以更精细地管理Spring容器中的组件,尤其适用于需要高度定制化的项目场景。
相关文章:
spring中的@bean注解详解
在Spring框架中,Bean注解是用于显式声明一个Bean的核心方式之一,尤其在基于Java的配置中。Spring框架中的Bean注解实现原理涉及多个核心机制,包括配置类解析、Bean定义注册、动态代理及依赖注入等 一、Bean注解的作用 Bean用于标注在方法上&…...
计算机网络中的DHCP是什么呀? 详情解答
目录 DHCP 是什么? DHCP 的工作原理 主要功能 DHCP 与网络安全的关系 1. 正面作用 2. 潜在安全风险 DHCP 的已知漏洞 1. 协议设计缺陷 2. 软件实现漏洞 3. 配置错误导致的漏洞 4. 已知漏洞总结 举例说明 DHCP 与网络安全 如何提升 DHCP 安全性 总结 D…...
uniapp-商城-38-shop 购物车 选好了 进行订单确认4 配送方式1
配送方式在订单确认页面最上方,可以进行选中配送还是自提,这里先看看配送。 代码样式: 可以看出来是通过组件来实现的。组件名字是:delivery-layout 1、建立组件文件夹和页面,delivery-layout这里就只有配送 2、具体…...
粒子群优化算法(Particle Swarm Optimization, PSO)的详细解读
最近研究基于进化算法的神经网络架构搜索,仔细阅读了TEVC2023年发表的一篇NAS搜索的文章,觉得收益颇多,对比NSGA-2,这里给出PSO的详细解释。【本人目前研究的是多目标进化算法,欢迎交流、留言】 文章题目是࿱…...
大模型在直肠癌预测及治疗方案制定中的应用研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 研究方法与创新点 二、大模型技术概述 2.1 大模型的基本原理 2.2 常见大模型类型及特点 2.3 在医疗领域的应用进展 三、直肠癌预测相关数据收集与处理 3.1 数据来源 3.2 数据清洗与预处理 3.3 特征工程 四、大…...
【C++】继承----下篇
文章目录 前言一、实现一个不能继承的类二、友元与继承三、继承与静态成员四、多继承以及菱形继承问题1.继承模型:2.菱形继承的问题3.虚拟继承解决数据冗余和二义性的原理4.虚拟继承的原理 五、继承的总结和反思1.继承和组合 总结 前言 各位好呀!今天呢我们接着讲继…...
windows安装jax和jaxlib的教程(cuda)成功安装
本文你将解决3个问题:1、jaxlib没有安装的问题;2、python3.9以上(不可忽略)、cuda12.1(可忽略)以上配置要求不满足的问题;3、numpy版本太高的问题。 1、问题描述 当你直接pip install jax或者c…...
软考【网络工程师】2023年5月上午题答案解析
1、固态硬盘的存储介质是()。 A 光盘 B 闪存 C 软盘 D 磁盘 答案是 B。 固态硬盘(Solid State Drive),简称 SSD,是用固态电子存储芯片阵列制成的硬盘,其存储介质是闪存(Flash Memory)。闪存具有非易失性,即在断电后仍能保留存储的数据,且读写速度快、抗震性强、能…...
支付场景下,乐观锁的实现(简洁版)
1、问题描述 看到一个同事建的数据库表,好奇打开看看。 create table db_paycenter.t_pay_order_divide (id bigint auto_increment comment 主键id|20250402|XXXprimary key,user_id bigint not null comment user…...
AI视频技术赋能幼儿园安全——教师离岗报警系统的智慧守护
教师离岗报警系统如一位无形的守护者,实时监测教室动态,一旦发现教师离岗超30秒,立即通知园方,确保幼儿不被忽视。这套开源系统以高效检测和即时报警为核心,助力园所优化管理,增强家长信心,开启…...
SCI论文结构笔记
摘要五要素(Abstract): 背景和研究问题研究目的研究方法研究结果结论和意义 引言(Introduction): 研究背景研究问题研究现状现有的研究的问题与不足本研究的研究目标文章结构 研究综述(Literature review): 选题的理由现存文献中可借鉴的…...
《修仙家族模拟器2》:游戏背景故事介绍!
《修仙家族模拟器2》构建了一个以修仙文明为根基的宗族传承世界,玩家将扮演家族初代掌舵者,在动态演变的修仙江湖中完成从凡俗世家到仙道巨擘的蜕变。以下为具体背景设定解析: 一、世界观架构:仙凡交织的修真宇宙 空间维度 游戏…...
Linux部署ragflow,从安装docker开始~
安装docker https://download.docker.com/linux/static/stable/x86_64/docker-28.0.1.tgz #首先创建一个文件夹,存放我们需要的各类文件,并切换到该目录 mkdir /project && cd /project #此时我们的工作目录已经切换到刚刚创建的文件夹下了,接…...
苹果iosApp提交审核常见问题--内购订阅篇
常见问题1- 准则2.1.1 Guideline 2.1 - Information Needed The app binary includes the PassKit framework for implementing Apple Pay, but we were unable to verify any integration of Apple Pay within the app. Next Steps If the app integrates the functionali…...
从代码学习深度学习 - 微调 PyTorch 版
文章目录 前言一、迁移学习与微调概念二、微调步骤解析三、实战案例:热狗识别3.1 数据集准备3.2 图像增强处理3.3 加载预训练模型3.4 模型重构3.5 差异化学习率训练3.6 对比实验分析总结前言 深度学习模型训练通常需要大量数据,但在实际应用中,我们往往难以获得足够的标记数…...
Registry镜像仓库的安装与使用
任务目标 (1)了解目前主流的镜像仓库 (2)掌握registry私有镜像仓库的部署与使用 任务实施 基础信息 Docker私有仓库个宿主机配置信息 主机名 IP地址 节点角色 registry 192.168.110.80 私有仓库 node1 192.168.110.9…...
java多线程(6.0)
目录 编辑 阻塞队列 阻塞队列概念 生产者消费者模型 阻塞队列的作用 阻塞队列的使用 阻塞队列的实现 阻塞队列 阻塞队列概念 阻塞队列是一种特殊的队列,同样遵循“先进先出”的原则,支持入队操作和出队操作和一些基础方法。在此基础上&#…...
tkinter的文件对话框:filedialog
诸神缄默不语-个人技术博文与视频目录 文章目录 一、前言二、tkinter.filedialog模块详解2.1 模块导入方式2.2 通用参数说明 三、五大核心函数实战3.1 选择单个文件 - askopenfilename()3.2 多文件选择 - askopenfilenames()3.3 保存文件对话框 - asksaveasfilename()3.4 选择目…...
HOW - 如何模拟实现 gpt 展示答案的交互效果
文章目录 产品设计维度核心目标实现方式主要靠一些技巧1. 用 emoji 做语义锚点2. 每个段落只传达一件事3. 有节奏地对话式切换4. 使用 Markdown 风格来排版5. 用“你”而不是“用户”说话 如果想实现类似体验(比如写文档、教程、产品介绍) 前端开发维度想…...
达梦数据库压力测试报错超出全局hash join空间,适当增加HJ_BUF_GLOBAL_SIZE解决
1.名词解释:达梦数据库中的HJ_BUF_GLOBAL_SIZE是所有哈希连接操作可用的最大哈希缓冲区大小,单位为兆字节(MB) 2.达梦压测报错: 3.找到达梦数据库安装文件 4.压力测试脚本 import http.client import multiprocessi…...
第11章 面向分类任务的表示模型微调
第1章 对大型语言模型的介绍第2章 分词和嵌入第3章 解析大型语言模型的内部机制第4章 文本分类第5章 文本聚类与主题建模第6章 提示工程第7章 高级文本生成技术与工具第8章 语义搜索与检索增强生成第9章 多模态大语言模型第10章 构建文本嵌入模型第12章 微调生成模…...
c#加密证件号的中间部分,改为*号
前言 使用场景:在我项目中,我需要给前端提供接口,所以我要吧证件号进行加密。例如:411421199510225612,这是一个身份证号,18为的,那么我加密完成之后就会是 411421********5612,类似…...
qt中写一个简易的计算器
以下是添加了详细代码注释的版本: cpp #include <iostream>using namespace std;定义加法函数(已注释掉) //int add(int a, int b) { // return a b; //}定义减法函数(已注释掉) //int min(int a, int b) {…...
[特殊字符] Docker 从入门到实战:全流程教程 + 项目部署指南(含镜像加速)
Docker 是现代 DevOps 的基石,应用广泛于微服务、CI/CD、K8s、云原生等场景。本文将从 0 到 1 手把手带你掌握 Docker 的核心知识点,并完成 Java Nginx 项目部署,适合新手与进阶开发者阅读与实战。 📚 目录 Docker 快速入门 入门…...
《R语言SCI期刊论文绘图专题计划》大纲
今天开始,我将和大家分享系统且详细的《R语言SCI期刊绘图专题教程》,内容会从基础到高阶应用,从配色美学到顶刊风格复现,确保大家可以学到高质量内容!下面是大纲。 📚《R语言SCI期刊论文绘图专题计划》 第…...
从氛围到节奏:情绪化配乐网站指南
在影视、短视频、广告甚至游戏开发中,配乐的作用早已超越了简单的背景音效,它能够深刻地影响观众的情绪,为作品注入灵魂。但如何找到那些能够精准传达情绪、完美契合画面的配乐呢?今天,就让我们一起探索那些能够助力你…...
矩阵运营:抢占市场与流量的利器
还在为无法超越行业老大而苦恼?还在为市场份额难以扩大而焦虑?还在为流量匮乏、客资不足而发愁?别担心,矩阵运营就是你突破困局的关键! 一、矩阵运营:颠覆传统的运营模式 在当今竞争激烈的商业环境中&…...
【2025最新面试操作系统八股】CPU利用率和load(负载)的区别,CPU利用率怎么算。
总结 负载(Load)和 CPU 利用率是衡量系统性能的两个不同的指标,它们从不同的角度反映了系统的状态。 CPU 利用率表示 CPU 正在执行指令的时间比例,即 CPU 忙碌的程度。它是一个百分比值,表示在某个时间间隔内&#x…...
ApplicationRunner的run方法与@PostConstruct注解
ApplicationRunner 的 run 方法与 PostConstruct 注解在 Spring Boot 中均用于初始化逻辑,但二者的 执行时机、作用范围 和 功能特性 存在显著差异。以下是详细对比分析: 一、核心差异对比 维度PostConstructApplicationRunner.run()触发时机Bean 实例化…...
【leetcode刷题日记】lc.73-矩阵置零
目录 1.题目 2.代码 1.题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]…...
配置 RDP 远程桌面协议连接ubuntu服务器桌面
文章目录 一、简介二、服务安装三、桌面安装小结 一、简介 RDP(Remote Desktop Protocol,远程桌面协议)是微软开发的一种专有协议,用于在网络上实现远程桌面访问,允许用户通过客户端设备(如 Windows、Linu…...
统计文件中单词出现的次数并累计
# 统计单词出现次数 fileopen("E:\Dasktape/python_test.txt","r",encoding"UTF-8") f1file.read() # 读取文件 countf1.count("is") # 统计文件中is 单词出现的次数 print(f"此文件中单词is出现了{count}次")# 2.判断单词出…...
【初识Trae】字节跳动推出的下一代AI原生IDE,重新定义智能编程
初识官网文档 从官网可以看到有两个大标签页,即Trae IDE CN和Trae插件,这就说明Trae在发布Trae IDE的同时考虑到对主流IDE的插件支持,这一点非常有心,但是我估测Trae IDE的体验更好(就是AI IDE出生,毕…...
Spark读取Apollo配置
--conf spark.driver.extraJavaOptions-Dapp.idapollo的app.id -Denvfat -Dapollo.clusterfat -Dfat_metaapollo的meta地址 --conf spark.executor.extraJavaOptions-Dapp.idapollo的app.id -Denvfat -Dapollo.clusterfat -Dfat_metaapollo的meta地址 在spark的提交命令中&…...
前端技术Ajax实战
1.1 案例_图书管理-介绍 目标 掌握图书管理案例的增删改查业务和 Bootstrap 弹框的使用。 讲解 1. 运行图书管理案例效果 展示增删改查业务效果,并使用 Bootstrap 弹框承载表单。 2. 分析步骤 学习 Bootstrap 弹框(用于添加和编辑图书)…...
ctfshow web入门 命令执行(29-77)
Web 命令执行是指攻击者借助Web应用程序里的漏洞,在服务器端执行任意系统命令的一种攻击手段。 原理: Web 应用程序在处理用户输入时,有时会调用系统命令。若开发人员没有对用户输入进行严格的过滤与验证,攻击者就能够通过构造恶意…...
Mac「brew」快速安装Redis
安装Redis 步骤 1:安装 Redis 打开终端(Terminal)。 运行以下命令安装 Redis: brew install redis步骤 2:启动 Redis 安装完成后,可以使用以下命令启动 Redis 服务: brew services start redis…...
非对称电容减重实验
加载高压的非对称电容在变压器油中的减重实验 早年国外流传飘升机(Lifter)的视频。爱好者们用简单的材料制作了非对称电容,通高压直流电,它就能飘起来。 所谓的飘升机,就是一种非对称电容。它由面积相差极大的两个极板…...
day37图像处理OpenCV
文章目录 一、图像预处理19 霍夫变换19.1 理解霍夫变换19.2 (标准)霍夫直线变换19.3 统计概率霍夫直线变换19.4 霍夫圆变换 一、图像预处理 19 霍夫变换 19.1 理解霍夫变换 霍夫变换是图像处理的一种技术,主要用于检测图像中的直线、圆等几何形状。基本思想就是将…...
23种设计模式-行为型模式之责任链模式(Java版本)
Java 责任链模式(Chain of Responsibility Pattern)详解 🧠 什么是责任链模式? 责任链模式是一种行为型设计模式,它使多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合关系。将这些对象…...
机器学习的基本概念
机器学习是人工智能的一个重要研究领域。与计算机科学、心理学等多种学科都有密切的关系,牵涉的面比较宽,而且许多理论及技术上的问题尚处于研究之中,接下来对它的一些基本概念和方法作一简要讨论,以便对它有一个初步的认识。 一…...
【6】GD32 高级通信外设 CAN、USBD
高级通信外设:CAN、USBD CAN CAN简介、主要功能与相关API回环模式收发发送特定ID的数据帧实验CAN数据帧的接收实验使用过滤器接收特定的数据帧 USBD USB通信简介USBD设备固件库架构、分层文件与库函数说明USBD模拟键盘应用USBD虚拟串口应用USBD模拟U盘应用...
手工收集统计信息
有时想对某些表收集统计信息 CREATE OR REPLACE PROCEDURE GATHER_STATS ASDECLAREV_SQL1 VARCHAR(1000);--表游标CURSOR C1 ISSELECT (SELECT USER) AS TABLE_OWNER,TABLE_NAMEFROM USER_TABLES; --可以在这里加过滤条件--索引游标CURSOR C2 ISSELECT TABLE_OWNER,INDEX_NAM…...
隧道调频广播覆盖的实现路径:隧道无线广播技术赋能行车安全升级,隧道汽车广播收音系统助力隧道安全管理升级
隧道调频广播覆盖的实现路径:隧道无线广播技术赋能行车安全升级,隧道汽车广播收音系统助力隧道安全管理升级 北京海特伟业科技有限公司任洪卓发布于2025年4月23日 在现代交通基础设施建设中,隧道作为公路、铁路等交通网络的重要组成部分,其内部通信系统…...
深度强化学习(DRL)实战:从AlphaGo到自动驾驶
——从算法原理到产业落地的全链路解析 摘要 本文通过算法对比矩阵、训练流程图解、Python代码实战及产业应用解析,构建从理论创新到工程落地的完整技术栈。实验数据显示:采用PPO算法训练的7自由度机械臂抓取成功率达92%,基于改进型DQN的自…...
【数据可视化-33】病毒式社交媒体潮流与用户参与度可视化分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
ubuntu使用dify源码安装部署教程+避坑指南
很多人,包括我在最初使用dify的时候都习惯使用docker来部署安装环境,但在二次开发使用过程中,我们可能希望使用源码来安装,那么这篇文章我将给大家分享如何在ubuntu系统下使用源码安装,并提供大家遇到的疑难杂症如下: dify安装使用过程中报错:/console/api/workspaces/…...
软件技术专业
软件技术专业是一个专注于软件开发、测试、维护及相关技术的学科专业。以下是其相关介绍: 专业概述 软件技术专业主要培养具备扎实的软件理论基础和较强的实践能力,能熟练掌握软件开发工具和技术,从事软件设计、开发、测试、维护等工作的高素…...
AI数据分析的利器:解锁BI工具的无限潜力
在数字化浪潮席卷全球的今天,数据已成为企业最宝贵的资产之一。如何高效、准确地分析这些数据,挖掘其中的价值,成为企业决策的关键。AI数据分析,作为新时代的数据分析利器,正逐渐改变着企业的决策方式。而BI࿰…...
docker 代理配置冲突问题
问题描述 执行 systemctl show --property=Environment docker 命令看到有如下代理配置 sudo systemctl show --property=Environment docker Environment=HTTP_PROXY=http://127.0.0.1:65001 HTTPS_PROXY=http://127.0.0.1:65001 NO_PROXY=127.0.0.1,docker.io,ghcr.io,uhub…...