当前位置: 首页 > news >正文

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.icon-default.png?t=N7T8https://spring.io/projects

1、什么是Spring?

        Spring是一个开源的Java开发框架,它简化了Java应用程序的开发过程,提供了一套全面的、一致性的编程模型,使得开发者可以更轻松地构建可扩展、可维护的企业级应用程序。

 2、Spring框架的核心特性

  1. 控制反转(IoC):Spring通过IoC容器管理对象之间的依赖关系,简化了对象之间的耦合。
  2. 面向切面编程(AOP):Spring的AOP支持允许开发者在程序运行过程中动态地添加功能(例如事务管理、日志记录等)。
  3. 数据访问:Spring提供了对多种数据访问技术的支持,如JDBC、ORM框架、NoSQL等。
  4. 事务管理:Spring提供了一致的事务管理抽象,使得开发者可以在不同的事务管理实现之间切换。
  5. MVC框架:Spring的MVC框架使得开发者可以轻松地构建Web应用程序。
  6. 安全性:Spring提供了对身份认证和授权的支持,帮助开发者构建安全的应用程序。

3、优点

  1. 轻量级:Spring框架核心库非常轻量,通过模块化的设计,开发者可以选择所需的模块,避免了不必要的依赖。

  2. 松耦合:Spring框架采用依赖注入(DI)和面向接口编程的方式,使得应用程序各个组件之间的耦合度降低,易于维护和测试。

  3. 面向切面编程:Spring框架支持面向切面编程(AOP),可以解耦横切关注点(如事务管理、日志记录等),提高代码的复用性和可维护性。

  4. 容器管理:Spring框架提供了一个容器(IoC容器),可以统一管理应用程序中的对象,通过配置文件或注解方式管理对象的创建和销毁。

  5. 事务管理:Spring框架提供了强大的事务管理支持,可以通过声明式事务的方式简化事务管理的代码,减少样板代码的编写。

  6. 灵活性:Spring框架提供了丰富的扩展机制,可以与其他框架(如Hibernate、MyBatis等)无缝集成,也支持多种数据库连接池、日志等第三方组件的集成。

  7. 测试支持:Spring框架提供了对单元测试和集成测试的强大支持,可以方便地测试代码的正确性和性能。

  8. 社区活跃: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&#xff1f; 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 用户名&#xff1a;system 密码&#xff1a;****** 端口号&#xff1a;30015 Oracle环境 192.168.xx.xx 用户名 HANA_TEST 密码 ****** 端口号&#xff1a;31001 配置java环境变量 因为本次数据转换测试为将HANA数据转换到Or…...

互联网摸鱼日报(2024-04-01)

互联网摸鱼日报(2024-04-01) 36氪新闻 「矽迪半导体」获数千万天使轮融资&#xff0c;提供高效功率半导体方案&#xff5c;硬氪首发 本周双碳大事&#xff1a;国资委即将发布央企ESG指导意见&#xff1b;上海发文推动建立产品碳足迹管理体系&#xff1b;隆基新硅片面世 数字…...

pnpm比npm、yarn好在哪里?

前言 pnpm对比npm/yarn的优点&#xff1a; 更快速的依赖下载更高效的利用磁盘空间更优秀的依赖管理 我们按照包管理工具的发展历史&#xff0c;从 npm2 开始讲起&#xff1a; npm2 使用早期的npm1/2安装依赖&#xff0c;node_modules文件会以递归的形式呈现&#xff0c;严格…...

大前端-postcss安装使用指南

PostCSS 是一款强大的 CSS 处理工具&#xff0c;可以用来自动添加浏览器前缀、代码合并、代码压缩等&#xff0c;提升代码的可读性&#xff0c;并支持使用最新的 CSS 语法。以下是一份简化的 PostCSS 安装使用指南&#xff1a; 一、安装 PostCSS 在你的项目目录中&#xff0c…...

全局UI方法-弹窗三-文本滑动选择器弹窗(TextPickDialog)

1、描述 根据指定的选择范围创建文本选择器&#xff0c;展示在弹窗上。 2、接口 TextPickDialog(options?: TextPickDialogOptions) 3、TextPickDialogOptions 参数名称 参数类型 必填 参数描述 rang string[] | Resource 是 设置文本选择器的选择范围。 selected nu…...

LibreOffice 将word,excel,PowerPoint文件转换PDF

安装LibreOffice并将Word和Excel文件转换为PDF文件&#xff0c;并设置文件存放路径的步骤如下&#xff1a; 1. 安装LibreOffice 如果尚未安装LibreOffice&#xff0c;可以通过以下命令在Ubuntu上安装&#xff1a; sudo apt update sudo apt install libreoffice 2. 使用Li…...

鱼眼相机的测距流程及误差分析[像素坐标系到空间一点以及测距和误差分析]

由于最近在整理单目测距的内容&#xff0c;顺手也总结下鱼眼相机的测距流程和误差分析&#xff0c;如果有错误&#xff0c;还请不吝赐教。 参考链接: 鱼眼镜头的成像原理到畸变矫正&#xff08;完整版&#xff09; 相机模型总结&#xff08;针孔、鱼眼、全景&#xff09; 三维…...

谈谈Python中的列表、元组、字典和集合的主要区别和用法

谈谈Python中的列表、元组、字典和集合的主要区别和用法 Python是一种功能强大且易于学习的编程语言&#xff0c;它提供了多种数据结构来支持各种编程需求。其中&#xff0c;列表&#xff08;list&#xff09;、元组&#xff08;tuple&#xff09;、字典&#xff08;dictionar…...

【WPF应用24】C#中的Image控件详解与应用示例

在C#应用程序开发中&#xff0c;图像显示是一个常见的需求。无论是创建图形界面还是处理图像数据&#xff0c;System.Windows.Controls.Image控件都是实现这一目标的重要工具。本文将详细介绍Image控件的功能、用法、优化技巧以及一些实际应用示例&#xff0c;帮助开发者更好地…...

CTF题型 php://filter特殊编码绕过小汇总

CTF题型 php://filter特殊编码绕过小汇总 文章目录 CTF题型 php://filter特殊编码绕过小汇总特殊编码base64编码string过滤器iconv字符集 例题1.[Newstarctf 2023 week2 include]2.[Ctfshow web 117] php://filter 是一个伪协议&#xff0c;它允许你读取经过过滤器处理的数据流…...

【嵌入式智能产品开发实战】(十二)—— 政安晨:通过ARM-Linux掌握基本技能【C语言程序的安装运行】

目录 程序的安装 程序安装的本质 在Linux下制作软件安装包 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 嵌入式智能产品开发实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xf…...

网络编程的学习1

网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行数据传输。 三要素 ip&#xff1a;设备在网络中的地址&#xff0c;是唯一的标识。 ipv4:采取32位地址长度&#xff0c;分成4组。 ipv6&#xff1a;采用128位地址长度&#xff0c;分成8组。 …...

spark log4j日志文件动态参数读取

需要在log4j xml文件中设置动态参数&#xff0c;并支持spark任务在集群模式下&#xff0c;动态参数读取正常&#xff1b; 1.log4j配置文件 log4j2.xml <?xml version"1.0" encoding"UTF-8"?> <Configuration status"info" name&quo…...

设计模式,装修模式,Php代码演示,优缺点,注意事项

装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许动态地向一个现有对象添加新的功能或行为&#xff0c;而不改变其原始结构。在 PHP 中&#xff0c;可以使用类的继承和组合来实现装饰模式。下面是一个简单的 PHP 装饰模式示例代码&am…...

ubuntu下vscode ctrl+tab松开ctrl后不自动选中文件

vscode用ctrltab切换文件时&#xff0c;松开ctrl键后会自动选中切换的文件。 但是在ubuntu下发现有时不能自动选中切换的文件&#xff0c;需要再次按enter键才能打开文件。 经过测试发现解决方法有两个&#xff1a; 方法1&#xff1a;确认wayland状态&#xff0c;关闭wayland…...

【云开发笔记No.19】关于中台架构(1)

在云开发领域&#xff0c;中台架构是一种至关重要的组织架构&#xff0c;它为企业提供了一种灵活且高效的方式来应对市场的快速变化。下面将详细阐述中台架构的定义、起源、定位和价值。 中台架构的定义 中台架构是指在企业信息系统中&#xff0c;将业务流程、数据和应用系统…...

对于提高Web安全,WAF能有什么作用

数字化时代&#xff0c;网络安全已经成为了一个不可忽视的重要议题。网络攻击事件频发&#xff0c;各种安全隐患层出不穷&#xff0c;如何有效地保护我们的网络空间&#xff0c;确保信息安全&#xff0c;已成为一项迫切的任务。而Web应用防火墙&#xff0c;正是守护网络安全的一…...

Go 源码之 gin 框架

Go 源码之 gin 框架 go源码之gin - Jxy 博客 一、总结 gin.New()初始化一个实例&#xff1a;gin.engine&#xff0c;该实例实现了http.Handler接口。实现了ServeHTTP方法 注册路由、注册中间件&#xff0c;调用addRoute将路由和中间件注册到 methodTree 前缀树&#xff08;节…...

BM19 寻找峰值(二分查找)

import java.util.*; public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param nums int整型一维数组 * return int整型*/public int findPeakElement (int[] nums) {// write code hereint lef…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...