【利刃出鞘】链式思维利用ChatGPT,让其成为工作中的利剑?附带初学者扫盲SpringBoot

news2024/11/25 16:10:50

【利刃出鞘】链式思维利用ChatGPT,让其成为工作中的利剑

  • 一、一点思考
  • 二、技术学习——链式思维
    • 2.1 springboot注册bean的几种方式?
    • 2.2 springboot` @Component` 注册的原理?
    • 2.3 springboot引用注册的`Bean`原理?
    • 2.4 private final MyBean myBean,对于这样的引用还是少见,它和 @Autowired的区别是什么?
    • 2.5 继续深入提问
  • 三、ChatGPT比普通搜索引擎强在哪

一、一点思考

最近在工作中,使用ChatGPT的频率很大,特别是文档写作,如撰写文献综述、评优评先材料,它成为一位非常重要的“副驾驶”。其实对于很多人来说,也包括我,组织语言是一件非常劳心的事情,ChatGPT恰恰擅长,虽然并不是每次回答的内容非常符合规范和标准,但是其提供的内容稍加修改后(增加符合自身主题的内容)足以满足日常工作内容要求。

在这里插入图片描述

ChatGPT的能力取决于你问问题的能力,准确的指令会得到满意的回答。如在为一个活动拟定主题,ChatGPT就可以在你输入的指令下给你提供较为满意的且对仗工整的主题名称。如果你不满意,输入“继续优化”,它就可以无限地优化下去,或许某一个结果就符合你的“胃口”。

二、技术学习——链式思维

在面向对象程序设计中,程序工作者对链式编程或者是责任链模式应该很熟悉。而在使用ChatGPT时,它的强大就是可以进行链式问答,给一个起点问题,你可以在垂直方向接二连三的问下去,直到你对你的起点问题有一个比较清晰的认知。举个例子,就像我们再使用思维脑图时,可以连续Tab下去。

举个例子:

假如我是一个springboot初学者,不知道如何在程序中将普通类注册为bean,我该怎么办?下面就是我提问的过程。

2.1 springboot注册bean的几种方式?

回答:

在Spring Boot中,我们可以使用以下几种方式注册Bean:

使用@Component、@Service、@Repository和@Controller等注解,将类标记为一个组件,然后使用@ComponentScan或@SpringBootApplication等注解,将组件扫描并注册为Bean。

使用@Configuration和@Bean注解,将类标记为一个配置类,并在配置类中使用@Bean注解,将方法返回的对象注册为Bean。

实现接口ImportBeanDefinitionRegistrar,重写registerBeanDefinitions方法,手动注册Bean到Spring容器中。

实现接口BeanDefinitionRegistryPostProcessor,重写postProcessBeanDefinitionRegistry方法,手动注册Bean到Spring容器中。

使用@Import注解,将其他配置类或组件引入到当前配置类中,从而将其他配置类或组件中的Bean注册到Spring容器中。

需要注意的是,在Spring Boot中,我们通常使用注解方式来注册Bean,这样更加简单和方便。但在一些特殊场景下,手动注册Bean也是很有必要的,例如需要动态生成Bean对象时,就需要使用手动注册的方式。

我会选择使用@Component注解完成普通类的注册。接着我就很好奇@Component注册的原理?

2.2 springboot @Component 注册的原理?

在Spring Boot中,使用@Component注解将一个类标识为Spring容器中的一个组件,从而使得该类可以被Spring框架管理和使用。@Component注解是Spring中最基本的注解之一,可以用来标识一个类为Spring容器中的一个Bean。

在Spring Boot启动时,会自动扫描指定的包及其子包下的所有类,查找其中标注了@Component注解的类,并将其注册到Spring容器中。通过这种方式,我们可以方便地将自己编写的类作为组件注册到Spring容器中,从而使得其可以被其他组件或应用程序使用。

@Component注解本身并没有太多的逻辑,其实现原理是基于Spring框架中的@ComponentScan注解和ClassPathBeanDefinitionScanner类。@ComponentScan注解用于指定需要扫描的包及其子包,ClassPathBeanDefinitionScanner类则用于扫描指定包下的所有类,并将标注了@Component注解的类注册到Spring容器中。

需要注意的是,@Component注解默认只会扫描当前应用程序的类路径下的组件,如果需要扫描其他类路径下的组件,可以使用@ComponentScan注解指定需要扫描的类路径。同时,@Component注解还有其它的变种,如@Service、@Controller、@Repository等,它们分别用于标识不同类型的组件,但其实现原理与@Component注解相同。

根据回答,大致明白了@Component注解的作用原理。接着我就好奇,被注册的Bean在程序其它地方怎么引用?

2.3 springboot引用注册的Bean原理?

在Spring Boot中,引用已经注册的Bean的原理主要是依赖于Spring框架中的依赖注入(Dependency Injection)机制。通过依赖注入,我们可以在应用程序中自动注入其他组件所创建的Bean,从而实现组件之间的协同工作。

在Spring中,依赖注入是通过控制反转(Inversion of Control,简称IoC)实现的。控制反转指的是将对象的创建和依赖关系的管理交给外部容器,而不是由对象自己来管理。在Spring中,容器会负责创建和管理Bean,同时将其注入到需要它们的其他组件中。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

通过上述方式,我们可以方便地实现组件之间的依赖注入,从而实现组件之间的协同工作。同时,Spring Boot还支持其他的依赖注入方式,如Java Config、XML配置等,可以根据实际情况选择合适的方式进行使用。

瞬间,我们的知识量充裕了。 我们在构造器注入的方式中,看到了 private final MyBean myBean;,对于这样的引用还是少见,它和 @Autowired的区别是什么?

2.4 private final MyBean myBean,对于这样的引用还是少见,它和 @Autowired的区别是什么?

private final MyBean myBean 是使用构造器注入(Constructor Injection)方式来依赖注入的一种写法,它和使用 @Autowired 注解的属性注入方式在实现上是等价的,都是将 MyBean 注入到 MyComponent 组件中。

使用构造器注入时,我们将需要注入的组件作为构造函数的参数,通过将参数保存为 final 的方式来确保注入的组件不会被修改。这种方式可以帮助我们更好地控制组件的状态,避免在组件中意外地修改了注入的组件的状态。

而使用 @Autowired 注解的属性注入方式,我们需要将需要注入的组件标注为 @Autowired 注解,然后将该组件注入到属性中。这种方式的优点是可以将依赖注入的代码放在组件中的任意位置,方便开发者对组件的依赖关系进行维护。

总的来说,使用构造器注入的方式可以帮助我们更好地控制组件的状态,避免在组件中意外地修改了注入的组件的状态,同时也可以避免组件因为缺少必要的依赖而无法创建。而使用 @Autowired 注解的属性注入方式则更加方便,在组件中的任意位置都可以进行依赖注入,使得代码的可读性和可维护性更高。

需要注意的是,在使用构造器注入时,需要将需要注入的组件作为构造函数的参数,这样才能保证组件能够被注入。如果依赖的组件太多,构造函数会变得过于复杂,这时可以考虑使用 @Autowired 注解的属性注入方式。另外,构造器注入方式还可以使用 @Inject 注解来实现,使用方式类似于 @Autowired 注解。

2.5 继续深入提问

当然我们可以无限地继续提问下去,比如@Autowired和@Inject注解的区别在哪?

但是回到出个问题,我们想问的已经达到目的,并能够初步理解springboot相关知识。

接下来就是真正地去解决问题,而不是继续提问。

三、ChatGPT比普通搜索引擎强在哪

在信息爆炸的时代中,我们不缺乏信息量,而是缺乏筛选优质信息的能力。较于普通搜索引擎,ChatGPT做到了把爆炸信息优化到1条数据,不需要用户自己去筛选,如果不满意,继续提问即可,提高获得优质结果的效率。在普通搜索引擎中,我们需要不断地筛选结果集,从结果集中得到需要的答案。😦 说不定旁边一个广告,就把你带飞了。😦

ChatGPT还具有上下文环境的感知,能够通过联系上下文完成答案的提供,用户不需要记忆上一次搜索的关键词就可以继续进行提问。

综上,ChatGPT比普通搜索引擎相比,优势有以下几个方面。

  1. 节约筛选结果的时间;
  2. 上下文感知,用户体验好;
  3. 沉浸式补充知识技能树,摆脱冗余信息。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

26-第一个Servlet项目

目录 1.Servlet是什么? 2.第一个Servlet项目 2.1.创建Maven项目 2.2.引入Servlet依赖(将Maven项目改为Servlet项目(尚不完整)) 2.3.完善Servlet项目目录——源代码目录&单元测试目录(非必须) 2.4.编写代码 …

4月24日作业

作业1 #include <iostream> using namespace std; template <typename T> class Node { private: T* p; //指针指向栈的首地址 int maxsize; //栈最大容量 int top-1; //栈顶 public: Node(){} //无参构造 Node(int max):maxsize(max)//有参构造 填最大容…

2022 ICPC Gran Premio de Mexico Repechaje 题解

目录 A. Average Walk&#xff08;签到&#xff09; 题意&#xff1a; 思路&#xff1a; 代码&#xff1a; C. Company Layoffs&#xff08;签到&#xff09; 题意&#xff1a; 思路&#xff1a; 代码&#xff1a; D. Denji1&#xff08;模拟/二分&#xff09; 思路&am…

Bsah shell的操作环境

文章目录 Bsah shell的操作环境路径与命令查找顺序使用案例 bash的登录与欢迎信息&#xff1a;/etc/issue、/etc/motdbash的环境配置文件如下login与non-login shell/etc/profile(login shell 才会读)~/.bash_profile(login shell 才会读)source&#xff1a;读入环境配置文件的…

简单介绍一下什么是“工作内存”和“主内存”(JMM中的概念)

在学习Java多线程编程里&#xff0c; volatile 关键字保证内存可见性的要点时&#xff0c;看到网上有些资料是这么说的&#xff1a;线程修改一个变量&#xff0c;会把这个变量先从主内存读取到工作内存&#xff1b;然后修改工作内存中的值&#xff0c;最后再写回到主内存。 对…

【基于gcc】手把手教你移植RT-Thread到STM32

前言 网上大多数移植RT-Thread系统的教程都是基于Keil的&#xff0c;下面将带来基于gcc版本的移植教程&#xff0c;若你还没有基于gcc的环境&#xff0c;可以查看我的这篇文章&#xff1a;VSCode搭建STM32开发环境 1、下载RT-Thread源码 RT-Thread有好几个版本&#xff0c;我…

小程序路由跳转

小程序中的路由只是单纯页面地址的跳转&#xff0c;一般在页面中使用 navigator 组件来实现&#xff0c;也有很多场景需要在 js 中根据逻辑的执行结果跳转到某个页面&#xff0c;比如&#xff1a;如果检测到用户尚未登录就需要给他跳转到登录页面 1.1navigate navigate 跳转到…

软件工程开发文档写作教程(04)—开发文档的编制策略

本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;电子工业出版社《软件文档写作教程》 马平&#xff0c;黄冬梅编著 开发文档编制策略 文档策略是由上级(资深)管理者制订的&#xff0c;对下级开发单位或开发人…

银河麒麟 Server V10 离线源建立+部署

前言 这国产操作系统真神奇&#xff0c;docker CentOS7&#xff0c; MySQL CentOS8 简直了&#xff0c;这缝合技术真是绝了&#xff01; docker CentOS7 能装最新版 23 很顺利的&#xff01; MySQL CentOS8 也是最新版8.0.33的&#xff0c;也很顺利&#xff01; 系统版本 …

权威解析,软件测试的当下分析现状

Parasoft是一家专门提供软件测试解决方案的公司&#xff0c;Parasoft通过其经过市场验证的自动化软件测试工具集成套件&#xff0c;帮助企业持续交付高质量的软件。Parasoft的技术支持嵌入式、企业和物联网市场&#xff0c;通过将静态代码分析和单元测试、Web UI和API测试等所有…

详解树与二叉树的概念,结构,及实现(下篇)

目录 一&#xff0c; 二叉树链式实现 1. 前置说明 2. 二叉树遍历&#xff08;主打的就是一个分治思想&#xff09; 2. 1 前序遍历 2. 2 中序遍历 2. 3 后序遍历 2. 4 层序遍历 3. 二叉树结点个数及高度 3. 1 二叉树节点个数 3. 2 二叉树叶子节点个数 3. 3 二叉树第…

数字信号处理技术(三)自适应噪声完备集合经验模态分解(CEEMDAN)-Python代码

本文仅对自适应噪声完备集合经验模态分解&#xff08;CEEMDAN&#xff09;的原理简单介绍和重点介绍模型的应用。 1. CEEMDAN原理 CEEMDAN&#xff08;Complete Ensemble Empirical Mode Decomposition with Adaptive Noise&#xff09;的中文名称是自适应噪声完备集合经验模…

一文全解经典机器学习算法之支持向量机SVM(关键词:SVM,对偶、间隔、支持向量、核函数、特征空间、分类)

文章目录 一&#xff1a;概述二&#xff1a;间隔与支持向量三&#xff1a;对偶问题&#xff08;1&#xff09;什么是对偶问题&#xff08;2&#xff09;SVM对偶问题&#xff08;3&#xff09;SMO算法 四&#xff1a;核函数&#xff08;1&#xff09;核函数的概述和作用&#xf…

车载应用生态:小程序容器技术成为保障安全的有力措施

随着智能交通和车联网技术的快速发展&#xff0c;越来越多的车载应用程序&#xff08;APP&#xff09;进入人们的视野&#xff0c;从而推动了车载业务生态的不断发展。然而&#xff0c;车载应用程序的安全问题也引起了人们的广泛关注。为此&#xff0c;小程序容器技术作为一种有…

4.24每日一练

题目 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcod…

毕业设计 医学图像阅读器 DICOM CT MRI 阅读器 三维重建 可视化编程技术及应用

一、 概述 此系统实现了常见 VTK 四视图&#xff0c;实现了很好的 DICOM 图像显示&#xff0c;可用于 DICOM 超声 X线 CT MR 三维重建 拾取像素值 窗宽 窗位 像素&#xff0c;距离测量&#xff0c;角度测量&#xff0c;提供源码&#xff1b; 并且通过三维重建实现可视化。使用…

客快物流大数据项目(一百一十七):网关 Spring Cloud Gateway

文章目录 网关 Spring Cloud Gateway 一、简介 1、功能特性

OSCP-Exfiltrated(Subrion、exiftool提权)

目录 扫描 WEB 提权 其他方法 扫描 WEB 添加 host信息 访问了该网站,并立即注意到该网站上制作的CMS(Subrion CMS)。

机器学习笔记之密度聚类——DBSCAN方法

机器学习笔记之密度聚类——DBSCAN方法 引言基本思想概念介绍算法过程完整算法描述 DBSCAN \text{DBSCAN} DBSCAN的优点和缺陷 引言 本节将介绍密度聚类—— DBSCAN \text{DBSCAN} DBSCAN方法。 对于其他聚类任务的笔记&#xff1a; K-Means \text{K-Means} K-Means聚类算法&…

PXE高效批量网络装机

PXE 定义 PXE(预启动执行环境&#xff0c;在操作系统之前运行)是由Intel公司开发的网络引导技术&#xff0c;工作在client /server模式&#xff0c;允许客户机通过网络从远程服务器下载引导镜像&#xff0c;并加载安装文件或者整个操作系统。 具备以下三个优点 1 规模化: 同时…