Spring(详细介绍)
目录
一、简介
1、什么是Spring?
2、Spring框架的核心特性
3、优点
二、IOC容器
介绍
1、获取资源的传统方式
2、控制反转方式获取资源
3、DI
4、IOC容器在Spring中的实现
入门案例
1、创建Maven Module
2、引入依赖
3、创建HelloWorld类
4、在Spring的配置文件中配置bean
5、创建测试类测试
6、思路
7、注意
三、基于注解管理Bean
3.1、Bean对象定义及获取
3.2、Bean对象定义
3.3、Bean对象获取
3.4、应用分析
3.5、依赖注入
3.5.1、 @Value注解
3.5.2、@Autowired注解
一、简介
下载地址:
Spring | ProjectsLevel up your Java code and explore what Spring can do for you.https://spring.io/projects
1、什么是Spring?
Spring是一个开源的Java开发框架,它简化了Java应用程序的开发过程,提供了一套全面的、一致性的编程模型,使得开发者可以更轻松地构建可扩展、可维护的企业级应用程序。
2、Spring框架的核心特性
- 控制反转(IoC):Spring通过IoC容器管理对象之间的依赖关系,简化了对象之间的耦合。
- 面向切面编程(AOP):Spring的AOP支持允许开发者在程序运行过程中动态地添加功能(例如事务管理、日志记录等)。
- 数据访问:Spring提供了对多种数据访问技术的支持,如JDBC、ORM框架、NoSQL等。
- 事务管理:Spring提供了一致的事务管理抽象,使得开发者可以在不同的事务管理实现之间切换。
- MVC框架:Spring的MVC框架使得开发者可以轻松地构建Web应用程序。
- 安全性:Spring提供了对身份认证和授权的支持,帮助开发者构建安全的应用程序。
3、优点
轻量级:Spring框架核心库非常轻量,通过模块化的设计,开发者可以选择所需的模块,避免了不必要的依赖。
松耦合:Spring框架采用依赖注入(DI)和面向接口编程的方式,使得应用程序各个组件之间的耦合度降低,易于维护和测试。
面向切面编程:Spring框架支持面向切面编程(AOP),可以解耦横切关注点(如事务管理、日志记录等),提高代码的复用性和可维护性。
容器管理:Spring框架提供了一个容器(IoC容器),可以统一管理应用程序中的对象,通过配置文件或注解方式管理对象的创建和销毁。
事务管理:Spring框架提供了强大的事务管理支持,可以通过声明式事务的方式简化事务管理的代码,减少样板代码的编写。
灵活性:Spring框架提供了丰富的扩展机制,可以与其他框架(如Hibernate、MyBatis等)无缝集成,也支持多种数据库连接池、日志等第三方组件的集成。
测试支持:Spring框架提供了对单元测试和集成测试的强大支持,可以方便地测试代码的正确性和性能。
社区活跃:Spring框架是一个开源项目,拥有庞大的社区支持和活跃的开发者社群,可以获得丰富的文档、教程和解决方案。
总的来说,Spring框架是一款功能强大、灵活性高、易于扩展和维护的Java开发框架,适用于各种规模和类型的应用程序开发。
二、IOC容器
介绍
IOC:控制反转(Inversion of Control)
1、获取资源的传统方式
在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。
2、控制反转方式获取资源
反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。
3、DI
DI:Dependency Injection,翻译过来是依赖注入。
DI 是 IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。
IOC 就是一种反转控制的思想, 而 DI 是对 IOC 的一种具体实现。
4、IOC容器在Spring中的实现
Spring 的 IOC 容器就是 IOC 思想的一个落地的产品实现。IOC 容器中管理的组件也叫做 bean。在创建bean 之前,首先需要创建 IOC 容器。Spring 提供了 IOC 容器的两种实现方式:
1、BeanFactory
这是IOC容器的基本实现,是Spring内部使用的接口。面向Spring本身,不提供给开发人员使用。
2、ApplicationContext
BeanFactory的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext而不是底层的Bean Factory。
入门案例
1、创建Maven Module
2、引入依赖
<dependencies><!-- 基于Maven依赖传递性,导入spring-context依赖即可导入当前所需所有jar包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.1</version></dependency><!-- junit测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
</dependencies>
3、创建HelloWorld类
public class HelloWorld {public void sayHello(){System.out.println("helloworld");}
}
4、在Spring的配置文件中配置bean
<bean id="helloworld" class="com.atguigu.spring.bean.HelloWorld"></bean>
5、创建测试类测试
@Test
public void testHelloWorld(){ApplicationContext ac = newClassPathXmlApplicationContext("applicationContext.xml");HelloWorld helloworld = (HelloWorld) ac.getBean("helloworld");helloworld.sayHello();
}
6、思路
7、注意
Spring 底层默认通过反射技术调用组件类的无参构造器来创建组件对象,这一点需要注意。
三、基于注解管理Bean
3.1、Bean对象定义及获取
在Spring框架规范中,所有由spring管理的对象都称之为Bean对象
3.2、Bean对象定义
Spring提供了以下多个注解,这些注解可以直接标注在java类上,将它们定义成Spring Bean。
注解 | 说明 |
---|---|
@Component | 该注解用于描述Spring中的Bean,它是一个泛化的概念,仅仅标识容器中的一 个组件(Bean),并且可以作用在任何层次,例如Service层、Dao层等,使用时只需将该注解标注在相应的类上即可。 |
@Respository | 该注解用于数据访问层(Dao层)的类标识为Spring中的Bean,功能与 @Component相同。 |
@Service | 该注解通常作用在业务层(Service层),用于将业务层的类标识为Spring中的 Bean,其功能与@Component相同。 |
@Controller | 该注解通常作用在控制层(如SpringMVC的Controller),用于将控制层的类标 识为Spring中的Bean,其功能与@Component相同。 |
3.3、Bean对象获取
通过ApplicationContext对象获取:调用ApplicationContext对象的getBean()方法,传入对应类的类型 即可获取该Bean对象,示例:
ApplicationContext context = new AnnotationConfigApplicationContext("包扫描路径");
User user = context.getBean(类名.class);
3.4、应用分析
在 cn.spring 下创建子包 bean ,进行 bean 对象的创建及获取、
第1步:在bean包下创建类:UserDao
@Repository
public class UserDao {private String databaseUrl;private String username;private String password;
}
第2步:在bean包下创建测试类:UserDaoTest
public class TestUserDao {@Testpublic void testBean(){ApplicationContext context = new
AnnotationConfigApplicationContext("cn.spring.bean");UserDao userDao = context.getBean(UserDao.class);System.out.println("userDao = " + userDao);}
}
说明:将java类中的 @Repository注解 替换为 @Component注解、@Service注解、@Controller注 解 都是可以的。
3.5、依赖注入
3.5.1、 @Value注解
@Value注入是将属性值直接注入到bean中,主要用于注入一些简单类型的属性(如字符串、基本类型 等); 使用时需要注意属性的类型和格式,否则会导致注入失败。
示例:在UserDao中进行属性值注入
第1步:在UserDao的属性中通过@Value注解注入属性值
@Repository
public class UserDao {@Value("jdbc:mysql://localhost:3306/")private String databaseUrl;@Value("root")private String username;@Value("root")private String password;@Override
public String toString() {return "UserDao{" +"databaseUrl='" + databaseUrl + '\'' +", username='" + username + '\'' +", password='" + password + '\'' +'}';}
}
第2步:执行测试方法进行测试
3.5.2、@Autowired注解
@Autowired注入是将对象注入到bean中,并且在注入对象时会根据依赖注入容器中bean的类型进行匹 配。如果容器中有多个类型匹配的bean存在,则会抛出异常。因此,@Autowired注入常用于注入复杂 对象、接口类型的属性或其他bean实例。
3.5.2.1、 根据类型注入
定义UserService类,并注入UserDao对象
第1步:在包bean下创建 UserService 类
@Service
public class UserService {@Value("注册业务")private String sname;// Autowired自动装配@Autowiredprivate UserDao userDao;@Overridepublic String toString() {return "UserService{" +"sname='" + sname + '\'' +", userDao=" + userDao +'}';}
}
第2步:调整测试方法
@Test
public void testAuto(){ApplicationContext context = new
AnnotationConfigApplicationContext("cn.spring.bean");UserService userService = context.getBean(UserService.class);System.out.println("userService = " + userService);
}
第3步:执行测试方法测试
相关文章:
Spring(详细介绍)
目录 一、简介 1、什么是Spring? 2、Spring框架的核心特性 3、优点 二、IOC容器 介绍 1、获取资源的传统方式 2、控制反转方式获取资源 3、DI 4、IOC容器在Spring中的实现 入门案例 1、创建Maven Module 2、引入依赖 3、创建HelloWorld类 4、在Spring的配…...
Kettle使用
1.准备工作 KETTLE-5.4.zip HANA环境192.168.xx.xx 用户名:system 密码:****** 端口号:30015 Oracle环境 192.168.xx.xx 用户名 HANA_TEST 密码 ****** 端口号:31001 配置java环境变量 因为本次数据转换测试为将HANA数据转换到Or…...
互联网摸鱼日报(2024-04-01)
互联网摸鱼日报(2024-04-01) 36氪新闻 「矽迪半导体」获数千万天使轮融资,提供高效功率半导体方案|硬氪首发 本周双碳大事:国资委即将发布央企ESG指导意见;上海发文推动建立产品碳足迹管理体系;隆基新硅片面世 数字…...
pnpm比npm、yarn好在哪里?
前言 pnpm对比npm/yarn的优点: 更快速的依赖下载更高效的利用磁盘空间更优秀的依赖管理 我们按照包管理工具的发展历史,从 npm2 开始讲起: npm2 使用早期的npm1/2安装依赖,node_modules文件会以递归的形式呈现,严格…...
大前端-postcss安装使用指南
PostCSS 是一款强大的 CSS 处理工具,可以用来自动添加浏览器前缀、代码合并、代码压缩等,提升代码的可读性,并支持使用最新的 CSS 语法。以下是一份简化的 PostCSS 安装使用指南: 一、安装 PostCSS 在你的项目目录中,…...
全局UI方法-弹窗三-文本滑动选择器弹窗(TextPickDialog)
1、描述 根据指定的选择范围创建文本选择器,展示在弹窗上。 2、接口 TextPickDialog(options?: TextPickDialogOptions) 3、TextPickDialogOptions 参数名称 参数类型 必填 参数描述 rang string[] | Resource 是 设置文本选择器的选择范围。 selected nu…...
LibreOffice 将word,excel,PowerPoint文件转换PDF
安装LibreOffice并将Word和Excel文件转换为PDF文件,并设置文件存放路径的步骤如下: 1. 安装LibreOffice 如果尚未安装LibreOffice,可以通过以下命令在Ubuntu上安装: sudo apt update sudo apt install libreoffice 2. 使用Li…...
鱼眼相机的测距流程及误差分析[像素坐标系到空间一点以及测距和误差分析]
由于最近在整理单目测距的内容,顺手也总结下鱼眼相机的测距流程和误差分析,如果有错误,还请不吝赐教。 参考链接: 鱼眼镜头的成像原理到畸变矫正(完整版) 相机模型总结(针孔、鱼眼、全景) 三维…...
谈谈Python中的列表、元组、字典和集合的主要区别和用法
谈谈Python中的列表、元组、字典和集合的主要区别和用法 Python是一种功能强大且易于学习的编程语言,它提供了多种数据结构来支持各种编程需求。其中,列表(list)、元组(tuple)、字典(dictionar…...
【WPF应用24】C#中的Image控件详解与应用示例
在C#应用程序开发中,图像显示是一个常见的需求。无论是创建图形界面还是处理图像数据,System.Windows.Controls.Image控件都是实现这一目标的重要工具。本文将详细介绍Image控件的功能、用法、优化技巧以及一些实际应用示例,帮助开发者更好地…...
CTF题型 php://filter特殊编码绕过小汇总
CTF题型 php://filter特殊编码绕过小汇总 文章目录 CTF题型 php://filter特殊编码绕过小汇总特殊编码base64编码string过滤器iconv字符集 例题1.[Newstarctf 2023 week2 include]2.[Ctfshow web 117] php://filter 是一个伪协议,它允许你读取经过过滤器处理的数据流…...
【嵌入式智能产品开发实战】(十二)—— 政安晨:通过ARM-Linux掌握基本技能【C语言程序的安装运行】
目录 程序的安装 程序安装的本质 在Linux下制作软件安装包 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 嵌入式智能产品开发实战 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正…...
网络编程的学习1
网络编程 在网络通信协议下,不同计算机上运行的程序,进行数据传输。 三要素 ip:设备在网络中的地址,是唯一的标识。 ipv4:采取32位地址长度,分成4组。 ipv6:采用128位地址长度,分成8组。 …...
spark log4j日志文件动态参数读取
需要在log4j xml文件中设置动态参数,并支持spark任务在集群模式下,动态参数读取正常; 1.log4j配置文件 log4j2.xml <?xml version"1.0" encoding"UTF-8"?> <Configuration status"info" name&quo…...
设计模式,装修模式,Php代码演示,优缺点,注意事项
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许动态地向一个现有对象添加新的功能或行为,而不改变其原始结构。在 PHP 中,可以使用类的继承和组合来实现装饰模式。下面是一个简单的 PHP 装饰模式示例代码&am…...
ubuntu下vscode ctrl+tab松开ctrl后不自动选中文件
vscode用ctrltab切换文件时,松开ctrl键后会自动选中切换的文件。 但是在ubuntu下发现有时不能自动选中切换的文件,需要再次按enter键才能打开文件。 经过测试发现解决方法有两个: 方法1:确认wayland状态,关闭wayland…...
【云开发笔记No.19】关于中台架构(1)
在云开发领域,中台架构是一种至关重要的组织架构,它为企业提供了一种灵活且高效的方式来应对市场的快速变化。下面将详细阐述中台架构的定义、起源、定位和价值。 中台架构的定义 中台架构是指在企业信息系统中,将业务流程、数据和应用系统…...
对于提高Web安全,WAF能有什么作用
数字化时代,网络安全已经成为了一个不可忽视的重要议题。网络攻击事件频发,各种安全隐患层出不穷,如何有效地保护我们的网络空间,确保信息安全,已成为一项迫切的任务。而Web应用防火墙,正是守护网络安全的一…...
Go 源码之 gin 框架
Go 源码之 gin 框架 go源码之gin - Jxy 博客 一、总结 gin.New()初始化一个实例:gin.engine,该实例实现了http.Handler接口。实现了ServeHTTP方法 注册路由、注册中间件,调用addRoute将路由和中间件注册到 methodTree 前缀树(节…...
BM19 寻找峰值(二分查找)
import java.util.*; public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * param nums int整型一维数组 * return int整型*/public int findPeakElement (int[] nums) {// write code hereint lef…...
4.数组和切片【go】
数组是具有固定数量的元素的序列,而切片是对数组的一个连续片段的引用。切片是Go中常用的数据结构 数组(Array) 数组是一个具有固定长度且元素类型相同的序列。在Go中,数组的长度是其类型的一部分,因此[5]int和[10]int是不同的数组类型。数组的长度在声明时必须指定,并…...
Abaqus周期性边界代表体单元Random Sphere RVE 3D (Mesh)插件
插件介绍 Random Sphere RVE 3D (Mesh) - AbyssFish 插件可在Abaqus生成三维具备周期性边界条件(Periodic Boundary Conditions, PBC)的随机球体骨料及骨料-水泥界面过渡区(Interfacial Transition Zone, ITZ)模型。即采用周期性代表性体积单元法(Periodic Representative Vol…...
家庭记账本(源码+文档)
家庭记账本系统(小程序、ios、安卓都可部署) 文件包含内容程序简要说明含有功能项目截图客户端我的界面图表明细添加账单登录页明细注册页个人资料 后台管理用户管理后台登录页分类管理 文件包含内容 1、搭建视频 2、流程图 3、开题报告 4、数据库 5、参…...
深度学习评价指标(1):目标检测的评价指标
1. 简述 在计算机视觉/深度学习领域,每一个方向都有属于自己的评价指标。通常在评估一个模型时,只需要计算出相应的评价指标,便可以评估算法的性能。同时,所谓SOTA,皆是基于某一评价指标进行的评估。 接下来࿰…...
jmeter性能压测的标准和实战中会遇到的问题
1.性能标准建议 CPU 使用率:不超过 70% 内存使用率:不超过 70% 磁盘:%util到达80%严重繁忙 (os.disIO.filesystem.writeKbPS 每秒写入的千字节) 响应时间:95%的响应时间不超过8000ms 事务成功率:…...
6-82 求链式线性表的倒数第K项
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。 输入格式: 输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。 输出格式: 输出倒数第K个位置上的数据。如果这个位置不存在,输出错误…...
CDH集群hive初始化元数据库失败
oracle数据库操作: 报错如下:命令 (Validate Hive Metastore schema (237)) 已失败 截图如下: 后台日志部分摘录: WARNING: Use “yarn jar” to launch YARN applications. SLF4J: Class path contains multiple SLF4J binding…...
【ESP32S3 Sense接入语音识别+MiniMax模型对话】
1. 前言 围绕ESP32S3 Sense接入语音识别MiniMax模型对话展开,首先串口输入“1”字符,随后麦克风采集2s声音数据,对接百度在线语音识别,将返回文本结果丢入MiniMax模型,进而返回第二次结果文本,实现语言对话…...
【Java初阶(七)】接口
❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ 🚚我的代码仓库: 33的代码仓库🚚 目录 1.前言2.接口2.1语法规则2.2接口使用2.3接口特性2.4实现多个接口2.5接口使用实例2.6Clonable接口和深拷贝 3.Object类3.1对象比较equals方法3.2hashcod…...
Mac OS上使用matplotlib库显示中文字体
文章目录 问题描述解决步骤参考文章 问题描述 如果我们想要使用matplotlib画图的话,可能会出现下面的这种warning: UserWarning: Glyph 24212 (\N{CJK UNIFIED IDEOGRAPH-5E94}) missing from current font.解决步骤 解决这个问题,可以按照下面的做法…...
网站建设 鼠标/东莞seo建站哪家好
事件类型: 错误 事件来源: VsJITDebugger 事件种类: 无 事件 ID: 4096 日期: 2012-11-16 事件: 5:10:19 用户: NT AUTHORITY\SYSTEM 计算机: MT-9808 描述:mysqld-nt.exe [9148] 中发生未处理的 win32 异常。 对此异常的实时调试失败&…...
thinkphp只能做网站/seo引擎优化
如何通过Infopath2010编程方程向Sharepoint List提交数据 针对上一篇修改了一下,可以直接提交重复表里的数据到列表中,代码实现如下: public void CTRL1_5_Clicked(object sender, ClickedEventArgs e) { // 在此处编写…...
深圳做网站价比高的公司性/怎样注册自己的网站
思科提供了许多处理连接性的方法,这使得排除的故障和解决问题成为一个并不轻松的问题。从包括在某些思科路由器中的性能到PIX防火墙所提供的服务,再到思科的 Concentrator,其中的每一个都有其自身的特点。 考虑到选项的复杂性,本…...
网站实例/数据网站
上一篇文档写的是LVS(DR) Keepalived实现高性能高可用负载均衡服务器,这次主要写的是基于LVS(NAT) Keepalived实现高性能高可用负载均衡服务器。 其实NAT模式在企业用的不多,我和很多朋友都沟通过这个事情&…...
做美食介绍的网站/福建百度推广
随着微软2013系列产品的深入推广和功能的完善,越来越多的企业喜欢选择最新最好的微软基础架构产品,Lync Server 2013就是一款现在非常流行的企业内部的即时通讯工具。很多用户可能在客户端的选择上,或多或少的都会从早期的 Office Communicat…...
sae wordpress 安装插件/网推项目平台
此文链接 http://blog.csdn.net/zhouboat/archive/2007/08/25/1759031.aspx1、USB设备是使用USB接口的,在网上找了下,得知它使用如下两个配置文件或是注册表文件,usbstor.inf和usbstor.png。注册表文件是:Windows 2000下HKEY_LOCAL_MACHINE\S…...