spring 框架精读—坚持更新中

1.1、Spring简介

Spring Framework是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本。该框架基于Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一书中的代码,最初由Rod Johnson和Juergen Hoeller等开发。Spring Framework提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。


spring官方模块结构图



1.2、Spring是轻量级、一站式的开源框架

  • 轻量级:从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
  • 一站式:spring提供javaEE三层结构、每一层都有不同的技术支持。

1.3、Spring的基本核心概念

  • AOP:面向切面编程、遵守开闭原则OCP(Open-Close Principle)、是扩展功能而不是修改源代码来实现。
  • IOC:控制反(IOC)| 【别名】依赖注入(DI-Dependency Injection)、Spring通过控制反转(IoC)的技术促进了低耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

1.3.1、Spring中的IOC底层原理


不适用 Spring 框架解析图


使用 Spring IOC 原理图


1.3.2、IOC入门案例

package spring.ioc;

/**
 * @auther 陈郑游
 * @create 2016-12-01-20:31
 * @功能描述
 * @公司地址
 */

public class User {
	void getAdd(){
		System.out.println("User getAdd IOC 测试! ! !");
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:tx="http://www.springframework.org/schema/tx"
	   xmlns:mvc="http://www.springframework.org/schema/mvc"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
	   http://www.springframework.org/schema/beans/spring-beans.xsd
	   http://www.springframework.org/schema/tx
	   http://www.springframework.org/schema/tx/spring-tx.xsd
	   http://www.springframework.org/schema/context
	   http://www.springframework.org/schema/context/spring-context.xsd
	   http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

	<!--上面的schema约束没必要那么多-->
	<bean id="user" class="spring.ioc.User"></bean>

</beans>
package spring.ioc;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @auther 陈郑游
 * @create 2016-12-01-20:36
 * @功能描述 IOC入门测试
 * @公司地址
 */

public class UserTest {

	@Test
	public void userTest(){

		//1、加载配置文件
		ApplicationContext context = new
				ClassPathXmlApplicationContext("spring/spring-bean.xml");
		//2、得到实例
		User user =  (User)context.getBean("user");
		user.getAdd();

		//关闭资源
		((ConfigurableApplicationContext)context).close();
	}
}




1.4、Spring容器

spring容器最基本的接口就是BeanFactor。BeanFactory负责配置、创建、管理Bean,它有一个子接口:ApplicationContext,因此也称之为Spring上下文。Spring容器负责管理Bean与Bean之间的依赖关系。


BeanFactory接口包含以下几个基本方法:

  • Boolean containBean(String name):判断Spring容器是否包含id为name的Bean实例。
  • <T> getBean(Class<T> requiredTypr):获取Spring容器中属于requiredType类型的唯一的Bean实例。
  • Object getBean(String name):返回Sprin容器中id为name的Bean实例。
  • <T> T getBean(String name,Class requiredType):返回容器中id为name,并且类型为requiredType的Bean
  • Class <?> getType(String name):返回容器中指定Bean实例的类型。

调用者只需使用getBean()方法即可获得指定Bean的引用,无须关心Bean的实例化过程。即Bean实例的创建过程完全透明。


在使用BeanFactory接口时,我们一般都是使用这个实现类:org.springframework.beans.factory.xml.XmlBeanFactory。然而ApplicationContext作为BeanFactory的子接口,使用它作为Spring容器会更加方便。它的实现有:

  • FileSystemXmlApplicationContext
  • ClassPathXmlApplicationContext
  • AnnotationConfigApplicationContex


创建Spring容器实例时,必须提供Spring容器管理的Bean的详细配置信息。Spring的配置信息通常采用xml配置文件来设置,因此,创建BeanFactory实例时,应该提供XML配置文件作为参数。

XML配置文件通常使用Resource对象传入。Resource接口是Spring提供的资源访问接口,通过使用该接口,Spring能够以简单、透明的方式访问磁盘、类路径以及网络上的资源。

对于Java EE应用而言,可在启动Web应用时自动加载ApplicationContext实例,接受Spring管理的Bean无须知道ApplicationContext的存在。一般使用如下方式实例化BeanFactory。

//1、加载配置文件
		ApplicationContext context = new
				ClassPathXmlApplicationContext("spring/spring-bean.xml");


1.5、Bean

在Spring中,那些组成应用的主体(backbone)及由Spring IoC容器所管理的对象被称之为bean。简单地讲,bean就是由Spring容器初始化、装配及被管理的对象,除此之外,bean就没有特别之处了(与应用中的其他对象没有什么区别)。而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。
Bean的属性
  • id属性:不能包含特殊字符(如&…#等)、根据id配置属性。
  • name属性:功能跟id一样、但name属性包含特殊字符(如&…#等)、根据id配置属性。
  • class属性:创建对象的路径。
  • scope属性:作用域属性。
作用域描述

singleton

在每个Spring IoC容器中一个bean定义对应一个单实例对象(默认)。

prototype

一个bean定义对应多个对象实例。

request

在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的SpringApplicationContext情形下有效。

session

在一个HTTPSession中,一个bean定义对应一个实例。该作用域仅在基于web的SpringApplicationContext情形下有效。

global session

在一个全局的HTTPSession中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的SpringApplicationContext情形下有效。



1.5.1、Bean属性注入三种方式












Spring 4 Security MVC登录登出生产级实战解析 Spring Security 是 Java Web 应用权限控制的核心框架,其认证(Authentication)与授权(Authorization)机制基于过滤器链和 SecurityContext 持久化原理实现,具备细粒度访问控制、CSRF 防护、会话管理等关键安全能力。在传统 Spring MVC 架构中,Security 与 MVC 的深度耦合体现在视图层认证状态同步、控制器方法级权限注解生效、表单提交与 CSRF Token 协同等环节。掌握 login-processing-url 的 PO 阅读详情

相关推荐

Spring Framework中文官方文档的价值与使用指南

Spring Framework作为Java企业级开发的核心框架,其官方文档是开发者不可或缺的技术参考。IoC(控制反转)和AOP(面向切面编程)作为Spring的两大核心特性,通过容器管理和切面编程实现了组件解耦和功能增强。官方中文文档不仅准确翻译了这些关键技术概念,还保持了与英文版的同步更新,解决了术语不统一和版本滞后问题。在实际开发中,无论是配置多数据源事务还是处理Web MVC的本地化需求,官方文档都提供了可靠的指导。对于国内开发者而言,合理利用文档搜索技巧和版本验证方法,能够显著提升开发效率。Sp

weixin_42525369的博客 243

Spring Framework(框架)整体架构(不知道就有些搞笑了哈)

Spring 在这个Spring框架大行其道的软件开发世界里,尚有很多工程师天天在用,但是从来不会去思考下,Spring框架的整体架构到底是什么样子的啊。 一、首先通过维基百科看看什么是Spring框架 维基百科的地址:Spring框架的维基百科 二、看一下官网的介绍 Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以...

向小凯同学学习 7万+

PaddleOCR转ONNX模型实战:5分钟搞定中文OCR推理部署(附完整代码)

本文详细介绍了将PaddleOCR模型转换为ONNX格式并进行高效推理部署的完整实战方案。通过Paddle2ONNX工具实现模型转换,利用ONNX Runtime构建跨平台推理引擎,涵盖环境配置、模型优化、批量处理及多平台部署等关键步骤,显著提升中文OCR在边缘设备上的推理性能。

weixin_29051811的博客 617

Spring源码深度解析百度网盘下载

链接:https://pan.baidu.com/s/1KXSx1ix83vlJPhryfRw1hg 提取码:meks

qq_37113604的博客 9963

AI漫剧制作全流程零基础实操指南:从剧本到剪辑

AI漫剧是一种利用AI工具将剧本、分镜、出图、配音、剪辑整合为流水线的短视频内容形式。其技术原理基于文生图、图生图与文本转语音模型的组合,核心挑战在于角色一致性控制与分镜批量出图。这项技术大幅降低了视频制作门槛,使个人创作者无需演员和设备即可产出剧情向短内容,广泛应用于短视频平台的情景剧、玄幻、甜宠等题材。本文给出了一套零基础可照做的全流程实操方案,覆盖剧本提示词、分镜表、出图选型、配音合成与剪辑模板,帮助你快速跑通AI漫剧制作链路。

weixin_29048309的博客 538

智能车图像处理去畸变+逆透视教程

图像处理,去畸变与逆透视整合

wu58430的博客 1万+

java轻量级框架_轻量级的Java 开发框架 Spring

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集...

weixin_36054993的博客 3855

SOC Boot学习(二)——JTAG Debug介绍

JTAG(Joint Test Action Group ,联合测试行动小组 ) 是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试。JTAG 技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路 TAP ( Test Access Port ,测试访问口),通过专用的 JTAG 测试工具对内部节点进行测试。如今大多数比较复杂的器件都支持 JTAG 协议,如 ARM 、 DSP 、 FPGA 器件等。

yttt的博客 1610

java 1.8 spring 4.3_Spring框架

Spring框架是一款专业的编程工具,是为解决应用开发的复杂性而设计的,适合任何java应用,主要的功能就是使用基本的JavaBean代替EJB,并提供了更多的企业应用功能。软件的用途不仅仅限于服务器端的开发,需要的可以下载。Spring功能:支持 Java SE 8 / OpenJDK 8首次支持 JMS 2.0, JPA 2.1, Bean Validation 1.1, and JSR-23...

weixin_31925745的博客 365

SAP UI5 应用开发教程的学习目录 - 循序渐进,由浅入深,适合不同水平的 SAP UI5 开发人员

笔者在业余时间设计了这份 SAP UI5 学习教程,把开发一个完整的 SAP UI5 应用的流程,拆分成若干个步骤,力求每个步骤里,把涉及到的知识点都涵盖到。建议零基础或者对 SAP UI5 知之甚少的 SAP UI5 初学者,按照顺序从第一个步骤开始循序渐进地学习,把这些代码下载到本地,配合教程的文字讲解,自己动手,以加深理解。 对于已经有一定基础的 SAPUI5 开发人员,可以通过本文的目录,跳过前面一部分比较基础的章节,直接挑选对自己工作项目有关,或者包含某些知识点自己尚未掌握的章节来有针对性地学习。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3万+

具身智能(26):RDK S100的LeRobot或Agile X piper机械臂控制模型

本文档详细介绍了基于ROS2的机器人控制模型架构与标定数据联动机制。核心采用"感知-规划-控制"闭环流程,通过激光雷达、相机和IMU的融合数据实现厘米级定位(≤1cm)。文档包含两大控制模型配置:1)RDKLeRobot模型,重点说明PID参数调节和标定文件路径设置;2)AgileXPiper模型,强调驱动安装与外部标定文件集成。针对常见问题提供解决方案,如控制指令无响应需验证标定路径,运动偏差过大需重新标定等。最后给出批量部署方案,通过复制基准配置文件实现多机器人快速配置,要求定位偏差

码农17年的博客 179

精读Spring框架基础:Spring的发展历史+Spring的特性+体系结构!

Spring发展到今天,已经不仅仅指Spring Framework,而且还代表Spring的整个家族。Spring可以为Java企业级开发提供强有力的支持,其庞大而活跃的社区及持续开源的代码贡献,为各大公司的应用服务提供了基础支撑。Spring的发展历史世界上有两种天才,一种是专注于本专业并做出突出贡献的人,另一种是不但在本专业中有所建树,而且在专业之外还有非常高的造诣。例如,爱因斯坦属于前者,而达·芬奇则属于后者。

程序员高级码农的博客 1200

第1章 大数据概述

三次信息化浪潮 信息化浪潮 发生时间 标志 解决的问题 代表企业 第一次 1980年前后 个人计算机 信息处理 Intel、AMD、IBM、苹果、微软、联想、戴尔、惠普等 第二次 1995年前后 互联网 信息传输

wyz191的专栏 7089

Spring框架面试核心知识体系与实战解析

控制反转(IoC)和面向切面编程(AOP)是Spring框架的两大核心设计理念。IoC容器通过依赖注入实现组件解耦,其Bean生命周期管理包含实例化、属性填充、初始化等关键阶段。AOP则基于动态代理技术,通过切入点表达式和通知类型实现横切关注点的模块化。这些机制为Java企业级应用开发提供了强大的支持,特别是在构建微服务架构时,Spring Boot的自动化配置和Spring Cloud的分布式解决方案显著提升了开发效率。本文深入解析Spring面试中的高频考点,包括Bean作用域、事务传播机制等核心概念,

weixin_30263277的博客 454

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

科研信息过滤系统:基于认知带宽的论文精读方法论

在AI与交叉学科研究中,面对arXiv日均数百篇预印本的信息过载,传统文献追踪方式已失效。本文聚焦‘科研信息过滤’这一基础能力,解析其背后的认知心理学原理(如Miller’s Law对工作记忆的约束)与工程实践逻辑——如何将高密度学术内容转化为可验证、可迁移、可执行的技术指令。核心围绕‘4篇’这一数字背后的注意力计量本质,强调‘自解释性’‘双镜像验证’‘结构坍缩’等关键技术机制,解决博士生文献溺水、工程师技术杠杆识别难、跨学科者知识错位等典型痛点。系统不依赖大模型摘要或关键词匹配,而以认知带宽为标尺,构建可

weixin_30888413的博客 355

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

spring源码系列(三)——beanDefinition(1)

如果想系统的学习spring源码那么第一个需要搞明白的知识便是spring当中的BeanDefinition——spring bean的建模对象; 那么什么是spring bean的建模对象呢?一言概之就是把一个bean实例化出来的模型对象?有人会问把一个bean实例化出来有class就行了,Class也就是我们通常说的类对象就是一个普通对象的建模对象那么为什么spring不能用Class来建立b...

java_lyvee的专栏 5万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

(精读spring-framework-v5.3.5)环境搭建

环境idea2019.3+spring-framework-v5.3.5 获取源码 https://github.com/spring-projects/spring-framework git clone https://github.com/spring-projects/spring-framework.git 进入目录切换分支 cd spring-framework git checkout v5.3.5 使用idea加载项目打开如下配置spring-framework\gradle\wrapp

a807719447的专栏 378

spring 项目启动完成执行_读懂Spring源码——beanDefinition(1)

大家好,我是子路,一个靠Java吃饭的男人正文如果想系统的学习spring源码那么第一个需要搞明白的知识便是spring当中的BeanDefinition——spring bean的建模对象;笔者特别强调,beanDefintion的比较枯燥和晦涩难懂,但是非常非常重要,我打算写三篇来把beanDefintion知识讲完;如果你想精读spring源码,请你一定细读三篇beanDefintion的知...

weixin_39835965的博客 144

信息系统项目管理师备考全攻略:从教材精读到论文实战

信息系统项目管理是IT行业的核心能力之一,涉及项目规划、执行与监控的全生命周期管理。其知识体系以PMBOK框架为基础,包含十大知识领域和49个管理过程,其中敏捷项目管理等新趋势占比不断提升。掌握关键路径法、成本绩效分析等核心技术,不仅能通过高项考试,更能提升实际项目管理水平。本文通过三遍阅读法、案例分析模板等实用技巧,结合智慧园区等真实项目案例,详解如何高效备考含金量高的信息系统项目管理师认证,特别适合工作繁忙的IT从业者利用碎片时间系统提升。

weixin_33724659的博客 339

spring 项目启动完成执行_Spring源码之BeanDifinition(加几行代码,可以产出让队友几天也找不出的Bug)...

前言文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206/six-finger种一棵树最好的时间是十年前,其次是现在我知道很多人不玩qq了,但是怀旧一下,欢迎加入六脉神剑Java菜鸟学习群,群聊号码:549684836 鼓励大家在技术的路上写博客絮叨同样这篇文章也是直接copy的,因为子路老师已经写得很好了。我这边相当于重新学习一...

weixin_39551611的博客 91

spring源码系列-beanDefinition(子路,阿里java面试流程

用一段代码和结果来证明上面的理论 Appconfig.java @ComponentScan(“com.enjoy.beanDefinition”) @Configuration public class Appconfig { } X.java @Component public class X { public X(){ System.out.println(“X Constructor”); } } Y.java public class Y { } Test.java public class Te

m0_54852680的博客 225

Oracle - 插入、更新、删除,DML语句核心用法

INSERT是数据生命的起点,UPDATE是其成长与修正的脉搏,DELETE是其优雅退场的仪式。它们共同构成数据库最基础、最频繁、也最需敬畏的操作集合。本文从语法细节出发,穿越事务隔离、并发控制、Java 集成、安全防护与性能优化的层层关卡,试图为你构建一张完整的 DML 认知地图。永远显式书写WHERE—— 这是职业素养的底线;拥抱RETURNING与MERGE—— 它们让代码更短、更安全、更高效;用乐观锁应对高并发,用解决强一致—— 没有银弹,只有权衡;监控你的 DML,像监控心跳一样。

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

最全spring源码系列-beanDefinition(子路),java高级工程师面试视频

一种关于实例化的后置处理器一种是关于初始化的后置处理器,这里不是笔者臆想出来的,如果读者熟悉spring的后置处理器体系就可以从spring的后置处理器命名看出来spring对初始化和实例化是有非常大的区分的。笔者首先new了一个Y所对应的beanDefinition对象然后调用。的后置处理器)其实是spring提供的一个扩展点(spring提供很多扩展点,学习spring源码的一个非常重要的原因就是要学会这些扩展点,以便对spring做二次开发或者写出优雅的插件),可以让程序员干预bean工厂的。

2401_84558326的博客 851

Java开发者进阶指南:核心技术与面试策略

Java作为企业级开发的主流语言,其技术栈的深度与广度直接影响开发者的职业发展。从JVM内存模型到并发编程原理,再到Spring框架的响应式编程,构建扎实的基础知识体系是技术进阶的关键。在实际工程中,性能调优与分布式事务处理等场景对技术能力提出更高要求。通过分析大厂面试题库发现,技术敏感度与实战经验成为重要评估维度。本指南结合高频考点与学习路径设计,涵盖JUC源码、云原生技术栈等热点内容,并提供从实验环境搭建到白板编程的系统化训练方案,帮助开发者建立持续成长的技术雷达。

weixin_30315905的博客 414
上一篇: Nginx 反向代理、负载均衡、虚拟主机实践教程
下一篇: Spring稳扎稳打(0)之核心基础篇
AndyChen9988
博客等级 码龄11年 276粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值