Spring6快速入门

news2024/11/16 18:07:38

Spring6快速入门

各工具版本要求:

JDK:Java17+
Maven:3.6+
Spring:6.0.9

简介

Spring是一个控制反转(IOC),面向切面(AOP)编程的轻量级框架。
2002年,Rod Johnson首次推出Spring框架的雏形,interface21(https://interface21.io/)
2004年3月24日,Spring以interface21框架为基础,经过重新设计,发布了1.0正式版。

官网:http://spring.p2hp.com
官方文档地址:https://docs.spring.io/spring-framework/docs/
GitHub:https://github.com/spring-projects/spring-framework


Spring Framework

特点

🚀Spring是一个开源、轻量级,非入侵式的框架。(非入侵:Spring对应用程序本身的结构影响非常小)

🚀控制反转(IOC):把创建对象过程交给Spring管理

🚀面向切面(AOP):AOP用来封装多个类的公共行为,将那些与业务无关但和业务模块共同调用的逻辑封装起来,减少系统的重复代码,降低模块之间的耦合度,另外AOP还解决一些系统层面上的问题,比如日志、事务、权限等。

🚀容器:Spring IOC是一个容器,它可以降低使用门槛,提高开发效率

🚀组件化:使用简单的组件配置合成复杂的应用,在Spring中可以使用XML和java注解组合这些对象。

🚀一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库。

组成

Spring Core(核心容器)

spring core提供了IOC, DI, Bean配置装在创建的核心实现。核心概念:Beans, BeansFactory、BeanDefinitions、ApplicationContext.

spring-core:IOC和DI的基本实现
spring-beans:BeanFactory和Bean的装配管理(BeanFactory)
spring-context:Spring context上下文,即IOC容器(ApplicationContext)
spring-expression:spring表达式语言

Spring AOP
spring-aop:面向切面编程的应用模块,整合ASM、 CGLib、 JDK proxy
spring-aspects:集成AspectJ, AOP应用框架
spring-instrument:动态Class Loading模块

Spring Data Access
spring-jdbc:spring对JDBC的封装,用于简化jdbc操作
spring-orm:java对象与数据库的映射框架
spring-jms:Spring对Java Message Service(java消息服务)的封装,用于服务之间相互通信
spring-tx:spring jdbc事务管理

Spring Web
spring-web:最基础的web支持,建立于spring-context之上,通过servlet或listener来初始化IOC容器
spring-webmvc:实现web mvc
spring-websocket:websocket是Html5新增加特性之一,目的是浏览器与服务端建立全双工的通信方式,解决http请求-响应带来过多的资源消耗。
spring-webflux:Spring5.0提供的,用于取代传统Java servlet,非阻塞式Reactive Web框架,异步, 非阻塞,时间驱动事务。

Spring Message
Spring-messaging: spring4.0提供的, 为spring集成一些基础的报文传送服务。

Spring test
spring-test:集成测试支持,主要是对junit的封装。


第一个Spring6工程

步骤

创建maven聚合工程

在这里插入图片描述

引入spring6相关依赖

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

创建类,定义属性和方法

public class User {

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

按照spring要求创建配置文件(xml格式)

在这里插入图片描述

在spring配置文件中配置内容

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--完成user对象创建,
    bean标签
       id属性:唯一标识
       class属性:要创建对象所在类的全路径(包名称+类名称)
-->
    <bean id="user" class="com.louis.User"></bean>
</beans>

测试

@Test
public void test(){
    //加载spring配置文件,对象创建,参数是创建的xml文件
    ApplicationContext context = new ClassPathXmlApplicationContext("testSpring.xml");
    //获取创建的对象,getBean,其中的参数是在xml文件中id的属性值,转换为与自己创建的相应的对象
    User user = (User)context.getBean("user");
    //使用对象调用方法进行测试
    user.add();
}
 /*add....*/

总结

在上面使用的方式中可以看出,获取内容没有使用new关键字去创建对象,而是使用了反射。

执行过程

① 加载bean.xml配置文件
② 对xml文件进行解析操作
③ 获取xml文件bean标签中的属性值(id、class)
④ 使用反射根据全路径创建对象

Class clazz = Class.forName(class属性值)
 //1、获取类的Class对象(字节码文件)
Class<?> clazz = Class.forName("com.louis.User");
//2、调用方法创建对象
//Object o = clazz.newInstance();过时用法
User user = (User)clazz.getDeclaredConstructor().newInstance();

在Spring中创建对象,会将创建好的对象放入DefaultListableBeanFactory对象的Map集合中。

Map<String, BeanDefinition> beanDefinitionMap;
//key:唯一标识,value:类的定义(描述信息)

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

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

相关文章

python爬虫-获取cookie实例小记

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 第一步&#xff1a;请求拿到响应内容。并分析。 第二步&#xff1a;关键步骤分析(这部分参考的B站图灵…

2023 年互联网 Java 工程师高级面试八股文汇总(1260 道题目附解析)

今年的行情&#xff0c;让招聘面试变得雪上加霜。已经有不少大厂&#xff0c;如腾讯、字节跳动的招聘名额明显减少&#xff0c;面试门槛却一再拔高&#xff0c;如果不用心准备&#xff0c;很可能就被面试官怼得哑口无言&#xff0c;甚至失去了难得的机会。 现如今&#xff0c;…

concurrenthashmap原理

目录 一、Concurrent类型的容器 二、HashMap多线程死链问题 三、Concurrenthashmap8原理 1、构造器 2、get流程 3、put流程 4、initTable 5、addCount方法 6、size流程 四、Concurrenthashmap7原理 1、put流程 2、rehash扩容流程 3、get流程 一、Concurrent类型的…

如何选型低代码平台

编者按&#xff1a;近年来&#xff0c;在数字经济迅速发展的背景下&#xff0c;越来越多的企业开始建立健全业务系统&#xff0c;借助数字化工具提升管理效率。企业如何选自己合适的产品&#xff0c;本文从低代码定义&#xff0c;特点技术路线做了介绍。其中MyApps低代码平台拥…

git常用命令之tag

11. Tag 11.1 创建tag 命令作用轻量标签git tag v1.0基于本地当前分支最新commit创建tag v1.0git tag v.0325 125a1d1给指定commit 125a1d打标签附注标签git tag -a v.0329 -m "给标签添加说明" 125a1d1基于指定commit创建标签并添加说明git tag -a v.0329 -m &quo…

联邦学习中怎样对数据质量进行评估

目录 联邦学习中怎样对数据质量进行评估 联邦学习中怎么在不暴露数据的情况下&#xff0c;证明数据量条目数 联邦学习中怎样进行数据质量评估 联邦学习中怎样对数据质量进行评估 在联邦学习中&#xff0c;评估数据质量是至关重要的&#xff0c;因为数据质量直接影响到模型的…

Redis 简介与数据类型介绍

目录 ​编辑 一、Redis是什么&#xff1f; 二、redis五大基本类型 2.1 String(字符串) 2.1.1 应用场景 1&#xff09;缓存功能 2&#xff09;计数器 3&#xff09;统计多单位的数量 4&#xff09;共享用户session 2.2 List(列表) 2.2.1 应用场景 1&#xff09;消息队列 2…

07 redux的使用

总结 一.reduxjs/toolkit使用 1.1安装 安装&#xff1a; npm install reduxjs/toolkit在src目录中的store目录中的index.js中添加 1.2导入包中的对象 导入包中的对象 import { createSlice, configureStore } from reduxjs/toolkit1.3创建切片对象 创建切片对象 //这个…

霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)

1.车道线识别 当使用霍夫变换进行车道线识别时,可以按照以下步骤来编写 MATLAB 代码: 读入图像:使用imread函数读取包含车道线的图像。image = imread(lane_image.jpg);图像预处理:为了减少噪音和突出车道线,可以对图像进行预处理。通常,可以采用以下步骤:将图像转换为…

kafka入门,Kafka Broker工作流程、Broker重要参数(十一)

Zookeeper 存储的 Kafka 信息 在zookeeper的服务端存储的Kafka相关信息 1&#xff09;/kafka/brokers/ids [0,1,2] 记录有哪些服务器 2&#xff09;/kafka/brokers/topics/first/partitions/0/state 记录谁是leader,有哪些服务器可用 3&#xff09;/kafka/controller 辅助选举l…

Java中的「接口」到底是什么?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言什么是接口接口的定…

浅浅的复习一下sql

DISTINCT 语法&#xff1a; SELECT DISTINCT 列名称 FROM 表名称1、现在有一个表如下&#xff1a; 2、执行sql语句-1 SELECT DISTINCT ename,email FROM emp 结果&#xff1a; 说明&#xff1a;由于小刘的ename和email重复了&#xff0c;所以结果只显示一次&#xff01; 3…

面试最爱问的浏览器的缓存机制问题

老规矩&#xff0c;想要了解学会一项技术&#xff0c;先从定义下手&#xff01; 浏览器的缓存的定义 浏览器的缓存是指浏览器在处理网络资源时&#xff0c;将这些资源存储在本地磁盘或内存中&#xff0c;并在后续的请求中重复使用这些缓存的资源。它旨在提高网页加载速度、减少…

AI画图——十二生肖

适当放下代码&#xff0c;有益身心健康。 AI绘画&#xff0c;码农必备&#xff0c;超解压。 多少没被和谐算多少~~~ 子鼠 丑牛 寅虎 卯兔 辰龙 巳蛇 午马 未羊 申猴 酉鸡 戌狗 亥猪

在期刊的参考文献中如何设置引用书中的一个章节

前言&#xff1a; 在bib文件中&#xff0c;使用book形式来引用书中的章节或文章。因为有些书籍是按照章节进行排列的&#xff0c;有些书籍收集了相关主题下的论文&#xff0c;当我们想要引用书中的要给章节或者书中的某篇文章的时候&#xff0c;我们该如何做呢&#xff1f; 下…

mysql不同隔离级别事务插入数据

文章目录 前言一、问题二、测试2.1.RR级别&#xff0c;mysql默认级别2.1.1 打开一个mysql窗口&#xff0c;事务A2.1.2 打开另一个窗口&#xff0c;事务B2.1.3 提交事务A&#xff0c;再看结果如下 2.2 READ-COMMITTED 级别下测试2.2.1修改数据库的my.ini文件修改隔离级别2.2.2 查…

国产MCU-CW32F030开发学习-OLED模块

国产MCU-CW32F030开发学习-OLED模块 硬件平台 CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件0.96 IIC oled模块 软件平台 Keil MDK 5.31IAR串口调试助手 IIC总线 处理器和芯片间的通信可以形象的比喻成两个人讲话&#xff1a;1、你说的别人得能听懂&#xff1a;双…

【AUTOSAR】AUTOSAR开发工具链(五)----polyspace-bug-finder 简单操作说明

1、打开polyspace-bug-finder&#xff0c;新建工程文件&#xff1a;File New Project&#xff0c;命名&#xff0c;选择保存路径&#xff0c;然后点击Next。 2、找到需要检测的文件&#xff0c;然后点击“Add Source Files” Finish 3、在Configuration左边窗口点击“…

HotSpot 虚拟机对象探秘

HotSpot 虚拟机对象探秘 对象的内存布局 在 HotSpot 虚拟机中&#xff0c;对象的内存布局分为以下 3 块区域&#xff1a; 对象头&#xff08;Header&#xff09; 实例数据&#xff08;Instance Data&#xff09; 对齐填充&#xff08;Padding&#xff09; 对象头 对象头记录了…

FreeRTOS_调度器开启和任务相关函数详解

目录 前言 1. 调度器开启过程分析 1.1 指令集 1.2 任务调度器开启函数分析 1.2.1 内核相关硬件初始化函数分析 1.2.2 使能 FPU 函数分析 1.2.3 启动第一个任务 1.2.4 SVC 中断服务函数 1.2.5 空闲任务 2. 任务创建过程分析 2.1 任务创建函数分析 2.2 任务初始化函…