1.Spring核心功能梳理

概述

本篇旨在整体的梳理一下Spring的核心功能,让我们对Spring的整体印象更加具体深刻,为接下来的Spring学习打下基础。

本片主体内容如下:

  1. Bean的生命周期
  2. 依赖注入的实现
  3. Bean初始化原理
  4. 推断构造方法原理
  5. AOP的实现

这里要说明一下,我们这里说到的Spring,一般指的是Spring Framework。它和我们常用的Spring MVC和Spring Boot的关系可以这么理解:Spring是一个全栈式的Java开发框架,提供了众多功能;Spring MVC是Spring框架中的一个模块,专门用于开发Web应用程序;而Spring Boot则是基于Spring框架的一个快速开发Web应用程序的工具,它实现了自动配置并提供了一种简单的方法来启动和运行Spring应用程序。三者之间的关系可以概括为:Spring MVC和Spring Boot都是基于Spring框架的衍生产品,它们各自提供了不同的功能以满足不同的开发需求。
当然了,除了Spring MVC 和Spring Boot以外,Spring还包含很多其他的内容,比如Spring Cloud、Spring Data 等等。有兴趣的可以到其官网了解。

Bean的生命周期

在正式开始前,我觉得有必要先说一下什么是Bean。我们平时一提到Spring,不可避免的会提到Bean这个词。那到底什么时Bean?我们应该怎么理解Bean?这里说一下我对Bean的理解:
在Spring框架中,Bean具体指的是由Spring IoC容器实例化、组装和管理的对象。这些对象构成了应用程序的骨干,是Spring框架中核心概念之一。Bean并非由程序员直接创建,而是在运行时,由Spring容器根据配置信息自动创建和管理的。
理解Bean时,可以将其视为Spring IoC容器中的一个组件,该容器负责Bean的创建、初始化、组装以及销毁等生命周期管理。通过Spring的配置文件或注解,可以定义Bean的各种属性,如依赖关系、初始化方法、销毁方法等。Spring容器会根据这些配置信息,自动完成Bean的创建和依赖注入,从而实现应用程序的组件化开发和松耦合。

像上边这样描述下来可能还是很笼统,那先让我们先想一下在用Spring时,我们最常用的一些功能都有哪些?比如说依赖注入AOP事务管理等等。其实这些功能中都离不开Bean的使用。它在这几个功能中的大概作用是这样的:

  • 依赖注入:Spring容器通过配置文件或注解的方式,将Bean注入到其他Bean中,实现对象之间的解耦。这使得应用程序更加灵活和可维护,因为Bean之间的依赖关系不再硬编码在代码中,而是由Spring容器在运行时动态管理
  • AOP:通过配置Bean,Spring框架可以实现面向切面编程(AOP),将通用的横切关注点(如事务管理、日志记录等)与业务逻辑分离。这有助于减少代码冗余和提高代码的可维护性
  • 事务管理:Spring框架提供了对事务的支持,通过配置Bean可以管理事务的提交、回滚等操作,确保数据的一致性和完整性

总之,Bean在Spring框架中扮演着核心角色,它使得应用程序的开发更加灵活、可维护和可扩展。通过理解Bean的概念和作用,可以更好地掌握和使用Spring框架进行应用程序的开发。

提出疑问

我始终觉得学习一个知识或者技能,不能盲目的“为了学而学”。我觉得带着问题学习会效果更好一些,所以接下来我会抛出几个简单问题。

首先,我这里为了演示创建了一个很简单的项目,结构如下:
image.png
在这个示例demo中,目前只是简单的创建了两个文件一个是TestService,为了作为Bean来展示Spring的一些相关功能,另一个是TestSpringMain文件,其中只有一个main方法,为了运行演示。最下面的依赖包只有如图所示6个Spring的相关依赖,是通过在pom文件中引入spring-context来引入的。pom文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>spring_demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>Archetype - spring_demo</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.10</version>
    </dependency>

  </dependencies>
</project>

当前TestService和TestSpringMain分别的内容如下:
TestService

public class TestService {
   


    public void test(){
   
        System.out.println("test");
    }
}

TestSpringMain文件如下:

public class TestSpringMain {
   

    public static void main(String[] args) {
   

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        TestService testService = (TestService) context.getBean("testService");
        testService.test();

    }
}

首先让我们看一下在TestSpringMain这个文件中的这三行代码:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
TestService testService = (TestService) context.getBean("testService");
testService.test();

相信学习过Spring的朋友对这几行代码肯定不会陌生,这个相当于Spring学习中的Hello word。那让我们来思考一下这三行代码都做了什么?

  1. 第一行代码构造了一个ClassPathXmlApplicationContext对象,这个对象是什么?构造时传入的”spring.xml“又是起到什么作用?在构造这个对象的过程中都做了什么࿱

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rust 正在全面入侵前端

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ 原文作者&#xff1a;这波能反杀 过年期间我没怎么发文章&#xff0c;但是我也没闲着。在这个空闲时间&#xff0c;把 rust 基础以及个别生态技术方案扎扎实实的&#xff0c;系统的学习了一下。学习他的初衷是因为 …

5G“升级版”:5G-A正当其时

5G商用五年来&#xff0c;全球5G用户规模已经突破15亿&#xff0c;相当于4G九年的发展成果&#xff1b;同时&#xff0c;5G用20%的全球移动用户占比&#xff0c;贡献了30%的移动流量与40%的移动业务收入。而2月26日-29日在西班牙巴塞罗那举办的世界移动通信大会&#xff08;MWC…

Vue+wow.js+animate.css实现动画效果

1.介绍 Wow.js 是一个轻量级的 JavaScript 库&#xff0c;用于在网页滚动时实现动画效果。基于 CSS3 的动画库 Animate.css&#xff0c;并通过触发 CSS 动画类来创建各种引人注目的过渡和动画效果。 使用 Wow.js&#xff0c;可以很容易地为网页中的元素添加动画效果&#xff…

Redis持久化和集群

redis持久化 RDB方式 Redis Database Backup file (redis数据备份文件), 也被叫做redis数据快照. 简单来说就是把内存中的所有数据记录到磁盘中. 快照文件称为RDB文件, 默认是保存在当前运行目录. [rootcentos-zyw ~]# docker exec -it redis redis-cli 127.0.0.1:6379> sav…

供应IMX290LQR-C芯片现货

长期供应各品牌芯片现货&#xff0c;SONY索尼SONY索尼CMOS/CCD芯片全系列全新现货优势出&#xff1a; IMX225LQR-C IMX415-AAQR-C IMX290LQR-C imx273llr-C IMX397CLN-C IMX637-AAMJ-C IMX647-AAMJ-C IMX991-A***-C IMX991-AABJ-C IMX287LLR-C IMX287LQR-C IMX297L…

Pygame教程06:Event事件的类型+处理方法+监听鼠标事件

------------★Pygame系列教程★------------ Pygame教程01&#xff1a;初识pygame游戏模块 Pygame教程02&#xff1a;图片的加载缩放旋转显示操作 Pygame教程03&#xff1a;文本显示字体加载transform方法 Pygame教程04&#xff1a;draw方法绘制矩形、多边形、圆、椭圆、弧…

「璞华精选」品牌展区成为亮点,引领海外优质生活新潮流!

展会概况 3月07-09日&#xff0c;CCF 2023上海春季百货展在上海新国际博览中心圆满收官。以“聚焦品牌引流行业”为定位目标的CCF上海国际日用百货&#xff08;春季&#xff09;博览会&#xff0c;立足上海&#xff0c;辐射全球商贸&#xff0c;链接行业市场全局&#xff0c;赋…

mysql数据库中查询重复数据和去重数据

文章目录 1.查找重复数据2. 查到重复组的唯一数据3.删除重复数据4.注意重复的内容和删除的记录数是否一致 1.查找重复数据 select gene_entrez_id,count(*) a from diag_gene GROUP BY gene_entrez_id HAVING a > 12. 查到重复组的唯一数据 原理 分组后如果组内多个数据…

地下管网的“守门员”:智能井盖监控器

井盖&#xff0c;作为城市道路上的关键组成部分&#xff0c;其重要性不言而喻。一旦井盖未能得到妥善安装或及时维护&#xff0c;可能会引发一系列安全问题。井盖可能会开盖、松动或移位&#xff0c;这些状况不仅构成了交通隐患&#xff0c;还可能导致地下管网的损坏&#xff0…

SpringBoot(静态资源访问+Rest风格请求)

文章目录 1.静态资源访问1.基本介绍2.快速入门1.新建一个maven项目2.引入依赖 pom.xml3.创建文件目录4.Application.java5.创建四个可以存放静态资源的文件夹6.通过浏览器访问&#xff08;这四个都可以访问&#xff09; 3.注意事项和细节1.关于静态资源的访问管理2.修改静态资源…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的癌症图像检测系统(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;本篇博客深入介绍了如何借助深度学习技术开发癌症图像检测系统&#xff0c;以提高医疗诊断的精度和速度。系统基于先进的YOLOv8算法&#xff0c;并对比分析了YOLOv7、YOLOv6、YOLOv5的性能&#xff0c;如mAP和F1 Score。详细解释了YOLOv8的原理&#xff0c;并附…

Restormer: Efficient Transformer for High-Resolution Image Restoration

Abstract 由于卷积神经网络&#xff08;CNN&#xff09;在从大规模数据中学习可概括的图像先验方面表现良好&#xff0c;因此这些模型已广泛应用于图像恢复和相关任务。最近&#xff0c;另一类神经架构 Transformer 在自然语言和高级视觉任务上表现出了显着的性能提升。虽然 T…

纯血鸿蒙来画龙!基于HarmonyOS ArkTS来操作SVG图片

大家好&#xff0c;龙年报喜&#xff0c;大地回春&#xff0c;作为程序员&#xff0c;以代码之名&#xff0c;表达对于龙年的祝福。本节将演示如何在基于HarmonyOS ArkTS的Image组件来实现画一条中国龙&#xff0c;祝大家“码”上“鸿”福到&#xff01; 创建应用 选择空模板…

多线程 - 技术面手撕代码(java)

编写一个程序&#xff0c;开启 3 个线程&#xff0c;这三个线程的 ID 分别为 A、B、C&#xff0c;每个线程将自己的ID 在屏幕上打印10 遍&#xff0c;要求输出的结果必须按顺序显示&#xff0c;如: ABCABCABC… public class Main {private static final Object lock new Obj…

【Python程序开发系列】介绍一款轻量级高自由度web框架-NiceGUI

这是我的第237篇原创文章。 一、引言 NiceGui 是一个轻量级的 Python 前端框架&#xff0c;旨在简化用户界面的创建。它侧重于提供简单、直观的界面&#xff0c;特别适用于小型项目和快速原型设计。 然而&#xff0c;NiceGui 并不是一个专为构建复杂项目而设计的框架。对于大型…

SAP ERP销售应收成本科目确定

一、概述 ERP作为业财一体软件,其中最核心的就是业务与财务模块的自动集成,无需财务进行手工做账,提高工作效率的同时降低人工操作产生的误差。今天浅浅的分享一下SD模块生成会计凭证时,借贷项确定的系统配置。一般项目上借贷项、科目都有FICO提供,但是具体的集成配置是在…

App 测试必备 - 建议所有测试人收藏!

移动端App性能测试需要关注多个方面&#xff0c;包括响应时间、稳定性、内存使用、CPU使用率、网络性能、电池消耗以及设备兼容性等。通过综合考虑这些方面&#xff0c;并在不同条件下进行全面的测试&#xff0c;可以确保应用程序在各种情况下都能够提供优质的用户体验&#xf…

软件测试中的AI-为什么它在软件自动化测试中很重要?

通俗地说&#xff0c;人工智能&#xff08;AI&#xff09;是计算机科学的一个领域&#xff0c;它专注于使机器“智能化”。所谓智能&#xff0c;就是使系统能够像人类一样学习和做出决策。因此&#xff0c;人工智能机器将能够学习如何在特定情况下做出反应&#xff0c;然后根据…

在 Android 上恢复已删除文件的 5 种简单方法

您可能会因为意外删除、未完成的 Android 更新、手机意外关机等原因而丢失 Android 上的重要数据。新技术的发展使许多手机功能或程序能够从内部恢复丢失的数据。 在 Android 上恢复已删除文件的 5 种简单方法 然而恢复成功率的不确定性也成为人们克服数据丢失困境的重要考虑因…

阿里云国际放行DDoS高防回源IP

如果源站服务器上设置了IP白名单访问控制&#xff08;如安全软件、安全组&#xff09;&#xff0c;由于设置了DDoS高防后&#xff0c;回源IP是高防回源IP段&#xff0c;您需要将DDoS高防的回源IP段的地址加入安全软件和安全组的白名单中&#xff0c;避免DDoS高防的回源流量被误…