1.spring基础入门(一)

article/2025/8/20 23:22:34

Spring Framework

前⾔

Spring 是当前 Java 开发的⾏业标准,第⼀框架。

Spring 概念诞⽣于 2002 年,于 2003 年正式发布第⼀个版本 Spring Framework 0.9。

经过⼗⼏年的优化迭代,Spring Framework 已经从最初的取代 EJB 的框架逐步发展为⼀套完整的⽣

态,最新的版本是 5.X。

Spring 架构体系图

Spring 两⼤核⼼机制

  • IoC:⼯⼚模式
  • AOP:代理模式

IoC

IoC 是 Spring 框架的灵魂,控制反转。

lombok 可以帮助开发者⾃动⽣成实体类相关⽅法,在 IDEA 中使⽤,必须预先安装插件。

开发步骤

1、创建 Maven ⼯程,pom.xml 导⼊依赖。

<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.3.RELEASE</version> </dependency> 
</dependencies>

2、在 resources 路径下创建 spring.xml。

<?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:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
"><bean id="student" class="com.southwind.entity.Student"></bean>
</beans>

3、IoC 容器通过读取 spring.xml 配置⽂件,加载 bean 标签来创建对象

4、调⽤ API 获取 IoC 容器中已经创建的对象

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
Student student = (Student) applicationContext.getBean("student");
System.out.println(student);

IoC 容器创建 bean 的两种⽅式

1.⽆参构造函数

<bean id="student" class="com.southwind.entity.Student"></bean>

给成员变量赋值

<bean id="student" class="com.southwind.entity.Student"><property name="id" value="1"></property><property name="name" value="张三"></property><property name="age" value="22"></property>
</bean>

2.有参构造函数

<bean id="student3" class="com.southwind.entity.Student"><constructor-arg name="name" value="王五"></constructor-arg><constructor-arg name="id" value="3"></constructor-arg><constructor-arg name="age" value="18"></constructor-arg>
</bean>

从 IoC 容器中取 bean

通过 id 取值

Student student = (Student) applicationContext.getBean("student");

通过类型取值

Student student = (Student) applicationContext.getBean(Student.class);

当 IoC 容器中同时存在两个以上 Student Bean 的时候就会抛出异常,因为此时没有唯⼀的 bean

bean 的属性中如果包含特殊字符,如下处理即可

<bean id="classes" class="com.southwind.entity.Classes"><property name="id" value="1"></property><property name="name"><value><![CDATA[<⼀班>]]></value></property>
</bean>

IoC DI

DI 指 bean 之间的依赖注⼊,设置对象之间的级联关系。

Classes

@Data
public class Classes {private Integer id;private String name;private List<Student> studentList;
}

Student

@Data
@NoArgsConstructor
public class Student {private Integer id;private String name;private Integer age;public Student(Integer id, String name, Integer age) {System.out.println("通过有参构造创建对象");this.id = id;this.name = name;this.age = age;}public Student(Integer id, String name) {this.id = id;this.name = name;}
}

spring-di.xml

<?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:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
"><!-- Classes --><bean id="classes" class="com.southwind.entity.Classes"><property name="id" value="1"></property><property name="name" value="一班"></property><property name="studentList"><list><ref bean="student"></ref><ref bean="student2"></ref></list></property></bean><!-- Student --><bean id="student" class="com.southwind.entity.Student"><property name="id" value="100"></property><property name="name" value="张三"></property><property name="age" value="22"></property><property name="classes" ref="classes"></property></bean><bean id="student2" class="com.southwind.entity.Student"><property name="id" value="200"></property><property name="name" value="李四"></property><property name="age" value="18"></property><property name="classes" ref="classes"></property></bean></beans>

Spring 中的 bean

bean 是根据 scope 来⽣成,表示 bean 的作⽤域,scope 有 4 种类型:

  • singleton,单例,表示通过 Spring 容器获取的对象是唯⼀的,默认值。
  • prototype,原型,表示通过 Spring 容器获取的对象是不同的。
  • request,请求,表示在⼀次 HTTP 请求内有效。
  • session,会话,表示在⼀个⽤户会话内有效。

requset,session 适⽤于 Web 项⽬。

singleton 模式下,只要加载 IoC 容器,⽆论是否从 IoC 中取出 bean,配置⽂件中的 bean 都会被创

建。

prototype 模式下,如果不从 IoC 中取 bean,则不创建对象,取⼀次 bean,就会创建⼀个对象。

Spring 的继承

Spring 继承不同于 Java 中的继承,区别:Java 中的继承是针对于类的,Spring 的继承是针对于对象

(bean)。

Spring 的继承中,⼦ bean 可以继承⽗ bean 中的所有成员变量的值

<bean id="user1" class="com.southwind.entity.User"><property name="id" value="1"></property><property name="name" value="张三"></property>
</bean><bean id="user2" class="com.southwind.entity.User" parent="user1"><property name="name" value="李四"></property>
</bean>

通过设置 bean 标签的 parent 属性建⽴继承关系,同时⼦ bean 可以覆盖⽗ bean 的属性值。

Spring 的继承是针对对象的,所以⼦ bean 和 ⽗ bean 并不需要属于同⼀个数据类型,只要其成员变量

列表⼀致即可。


http://www.hkcw.cn/article/rfajtvvsHq.shtml

相关文章

从0到1构建无纸化办公:Paperless-ngx系统实战部署与效率优化全过程

文章目录 前言1.关于Paperless-ngx2.Docker部署3.简单使用paperless4.安装cpolar内网穿透5. 配置公网地址6. 配置固定公网地址总结 前言 在信息技术迅猛发展的今天&#xff0c;传统纸质文件管理正面临前所未有的挑战。每当晨会开始的提示音响起&#xff0c;职场人士是否经历过…

PCA主成分分析与Python应用

一.原理简介 主成分分析&#xff08;Principal Compoent Analysis,PCA&#xff09;是一种常用的统计方法和降维技术&#xff0c;用于从高维数据中提取重要信息&#xff0c;减少数据的维度&#xff0c;同时尽可能保留数据的关键特征和变化信息。 PCA通过将原始数据投射到新的坐…

印度5岁女童遭邻居性侵,警方认为是轻罪当晚放人!

印度5岁女童遭邻居性侵,警方认为是轻罪当晚放人。印度北方邦阿格拉市一名5岁女童,到家附近的寺庙玩耍时,竟遭邻居诱骗性侵,过程全被监视器拍下。警方却认为,邻居只是犯下轻罪,当晚就将他释放。受害女童的祖母讲述,孙女18日上午到附近的寺庙外头玩耍,邻居帕维特拉将孙女…

刘越评全运会断腿事件:“踢不到球还不会踢人吗?”中国足球不冤 社会足球现状堪忧

5月29日,前国脚刘越在社交媒体上对全运会足球比赛中出现的暴力飞踢事件发表了看法。他认为,全运会足球增设社会组本是一项很好的推广全民体育的尝试,让不同年龄和背景的人都能参与进来。以前,参加全运会是专业运动员奋斗的目标,现在这种机会扩大到了更广泛的群体。然而,社…

官方通报小车高架坠桥5人死亡 车道突变致车辆失控

官方通报小车高架坠桥5人死亡!近日,广东东莞环莞快速路虎门段发生了一起交通事故,引起了广泛关注。一名网友称其侄儿驾车经过该路段时,由于四车道突然收窄为三车道,车辆失控从高架冲出路面,造成5人伤亡。事故发生在5月19日18时23分,苏某(男,23岁)驾驶小汽车搭载4人沿…

Perforce P4产品简介:无限扩展+全球协作+安全管控+工具集成(附下载)

本产品简介由Perforce中国授权合作伙伴——龙智编辑整理&#xff0c;旨在带您快速了解Perforce P4版本控制系统的强大之处。 世界级无限可扩展的版本控制系统 Perforce P4&#xff08;原Helix Core&#xff09;是业界领先的版本控制平台&#xff0c;备受19家全球Top20 AAA级游…

Futaba乐迪小飞象Frsky7通多协议接收机KA6说明书

Futaba乐迪小飞象Frsky7通多协议接收机KA6 重量&#xff1a;10g 尺寸&#xff1a;40x28x14mm 工作电压&#xff1a;3.7-5v 信号输出&#xff1a; 7个PWM通道 支持协议&#xff1a;Futaba SFHSS, Radiolink,DumboRC, Frsky D8 遥控距离&#xff1a;SFHSS 使用 4合1高频头&…

炸裂!追觅管理者致内部:员工价值需达雇佣成本15倍,请自我审视一下 深圳同事效率受质疑

5月29日,网传消息称追觅公司有管理层质疑深圳办公地点员工的工作饱和度。该管理人员指出,许多深圳同事早上九点后才到岗,晚上八点前就下班了,并质疑深圳同事是否真的能在更短时间内高效完成工作。这位管理人员还提到,在行业内普遍认为员工创造的价值应达到雇佣成本的15倍以…

记者调查美国滥施关税究竟伤了谁?

记者调查美国滥施关税究竟伤了谁?2025年春天,当特朗普政府再度挥起关税大棒,美国的各行各业都被推到风口浪尖。东方卫视记者从美国华盛顿出发,车行一万公里,走访近10个州,用镜头拍下仓库里的空架、厨房里的囤货、超市标签的悄然变动,也记录下了农民的迷茫、民众的抱怨和…

项目管理进阶:98页IPD全流程全要素详解【附全文阅读】

IPD&#xff08;集成产品开发&#xff09;是源于 PACE 理论的系统性研发管理体系&#xff0c;强调以市场需求为驱动、将产品开发视为投资&#xff0c;通过四大核心流程&#xff08;战略管理、市场管理、产品开发、技术开发&#xff09;和四类跨部门团队&#xff08;IPMT、PDT、…

3372.连接两棵树后最大目标节点数目 I:脑筋急转弯——深搜确定k邻近节点(清晰题解)

【LetMeFly】3372.连接两棵树后最大目标节点数目 I&#xff1a;脑筋急转弯——深搜确定k邻近节点(清晰题解) 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximize-the-number-of-target-nodes-after-connecting-trees-i/ 有两棵 无向 树&#xff0c;分别有 n 和 …

哪吒汽车债转股失败!金主出手,条件是罢免创始人方运舟

哪吒汽车债转股失败。据《21汽车・一见Auto》5月29日爆料,哪吒“债转股”减轻债务以求新融资到位的方案宣告失败。爆料称,哪吒汽车欠供应商的总款项约60亿元左右,原定只需要化解一半的债务即30亿元,投资方才愿意提供新的资金。但知情人士透露,愿意接受“债转股”方案的供应…

明日端午节:“双春早端午,午时要躲藏” 古老习俗再现

明日端午节:“双春早端午,午时要躲藏” 古老习俗再现!端午节在仲夏时节,这时白天逐渐变长,太阳早出晚落。尽管我们看到的是太阳东升西落,实际上是地球自转造成的。端午节的具体日期是农历五月初五,也被称为重五日,主要是为了纪念屈原。这一天,人们会制作粽子、划龙舟等…

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.lxsq.service.

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.lxsq.service.mapper.DeviceInfoMapper.insertDeviceInfo 看文件夹没注意可能看不出来&#xff0c;其实是文件夹应该创建成层级&#xff0c;这个文件夹的名称就是mapper.service 在看…

用 Trae IDE 打造一个桌面小爬虫:从 PyQt5 开始,轻松采集掘金首页内容

很多程序员都有这样的经历&#xff1a;刷掘金、看文章、找灵感、追热点。但你有没有想过&#xff0c;有一天让“爬虫”代替你去浏览这些内容&#xff1f;自动提取标题、作者、点赞数、评论数&#xff0c;一键生成你的专属“技术热点日报”。 今天我们就用 Trae IDE PyQt5 来完…

王楚钦谈18岁时妈妈给自己写的信!

王楚钦谈18岁时妈妈给自己写的信。“大头夺冠,我没哭;莎莎夺冠,我也没哭。可是看到大头妈妈的这句话,我真的忍不住了,忍不住哭了出来。”这看似简单的话语,却饱含着网友内心深处被触动的情感。在过往的采访中,王楚钦多次提及妈妈写给他18岁生日的那封信。那封信里,字里…

CTA-861-G-2017中文pdf版

CTA-861-G标准&#xff08;2016年11月发布&#xff09;规范未压缩高速数字接口的DTV配置&#xff0c;涵盖视频格式、色彩编码、辅助信息传输等&#xff0c;适用于DVI、HDMI等接口&#xff0c;还涉及EDID数据结构及HDR元数据等内容。

女子向丈夫要钱遭拒后轻生系谣言 不实信息勿信传

近日,网络上流传一则消息,称山东一名女子因向丈夫索要5元钱买煎饼果子当早餐被拒后选择喝药轻生。经过省内各地和相关部门核实,该信息并不属实。提醒广大网友保持理性和冷静,不轻易相信和传播未经证实的消息,共同维护健康有序的网络环境。责任编辑:zx0176

PID在工业生产中的应用

1.什么是PID PID是“比例-积分- 微分 ”&#xff08;Proportional-Integral-Derivative&#xff09;的缩写&#xff0c;是一种常用于控制系统的调节算法。PID控制器 通过综合考虑当前偏差、偏 及偏差的变化速率&#xff0c;来调整系统的输出&#xff0c;以使系统的响应更加稳定…

RFID综合项目实训 | 基于C#的一卡通管理系统

目录 基于C#的一卡通管理系统 【实验目的】 【实验设备】 【实验内容】 【实验步骤】 实验准备 第一部分 界面布局设计 ​第二部分 添加串口通讯函数及高频标签操作功能函数(部分代码&#xff09; 第五部分 实验运行效果 基于C#的一卡通管理系统 【实验目的】 熟悉 …