Spring框架安装与基础操作
介绍
-
什么是Spring:一个轻量级Java开发框架,负责基础架构,解决企业级应用开发的业务逻辑层和其他各层的耦合问题,是一个分层的JavaSE轻量级开源框架,为Java应用程序提供全面的基础架构支持
-
作用:解决企业级应用开发的复杂性,即简化Java开发
-
框架核心:Ioc容器和AOP模块,通过IoC容器管理POJO对象以及他们之间的耦合关系;通过AOP以动态非侵入的方式增强服务
-
系统架构
-
-
Data Access:数据访问
-
Data Integration:数据集成
-
Web:Web开发
-
AOP:面向切面编程
-
Aspects:AOP思想的实现
-
Core Container:核心容器
-
Test:单元测试与集成测试
-
核心概念
-
IoC (Inversion of Control)控制反转
- 什么是Ioc:使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转
- Spring如何实现Ioc思想:Spring提供了一个容器,称为IoC容器,用来充当Ioc思想中的"外部"
- IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在Ioc容器中统称为Bean
-
DI(Dependency Injection)依赖注入
- 什么是DI:在容器中建立bean与bean之间的依赖关系的整个过程
-
Spring是如何充分解耦的
- 使用IoC容器管理bean(IoC)
- 在Ioc容器内将有依赖关系的bean进行关系绑定(DI)
- 使用对象时不仅可以直接从Ioc容器中获取,并且获取到的bea已经绑定了所有的依赖关系
bean容器
- BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载
- ApplicationContext接口是Spring?容器的核心接口,初始化时bean立即加载
- ApplicationContext接口提供基础的bean操作相关方法,通过其他接口扩展其功能
- ApplicationContext接口常用初始化类
- ClassPathXmlApplicationContext
- FileSystemXmlApplicationContext
基础 使用
Ioc使用
- 正常创建maven项目然后导包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.24</version>
</dependency>
- 创建配置文件

-
配置bean
- bean标签标示配置bean
- id属性标示给bean起名字
- class属性表示给bean定义类型
-
获取bean
-
首先:创建
ApplicationContext
对象读取配置-
ApplicationContext ctx = new ClassPathXmlApplicationContext("配置文件名");
-
-
方式1:使用bean名称获取bean
Object = ctx.getBean("bean名称");
-
方式2:bean类型
Object = ctx.getBean("bean名称",类.class);
-
方式3:bean名称并指定类型
Object = ctx.getBean(类.Class)
-
-
例
-
<?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"> <!-- 导入坐标:spring-context,版本:5.3.24--> <!-- 配置bean--> <bean id="bookDao" class="Spring.BookDaoImpl"/> </beans>
-
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); BookDao bookDao = (BookDao)ctx.getBean("bookDao");//BookDao是自己创建的类
-
DI使用
-
property属性用于配置bean
-
子属性
-
name:配置哪个属性
-
ref:参照哪个bean来配置
-
value:注入的值
-
List、Set、Map用于传值:
-
<bean id="boss" class="***"> <property name="favorites"> <map> <entry> <key><value>101</value></key> <value>唱歌</value> </entry> </map> </property> </bean>
-
-
<bean id="bookService" class="spring.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
public class BookServiceImpl {
private BookDaoImpl bookDao;//property配置了这个属性
public void setBookDao(BookDaoImpl bookDao) {
this.bookDao = bookDao;
}
}
bean配置

-
别名:name属性
- 在其中可以用空格隔开以起多个
-
作用范围:scope
- spring默认的bean是一个单例
- 参数:prototype(非单例)
- 哪些bean适合做单例:表现层、业务层、数据层对象,工具对象
- 哪些bean不适合做单例:封装实体的对象
-
生命周期:
init-method
destroy-method
属性- 对象使用
registerShutdownHook();
方法后会自动使用destroy-method
- 对象使用
-
生命周期的第二种方式:继承
InitializingBean,DisposableBean
类
依赖注入
-
Setter注入
-
在类中设置set函数
-
在配置中使用value属性注入值
-
<bean id="bookDao"class="BookDaoImpl"> <property name="databaseName"value="mysq1"/> <property name="connectionNum"value="10"/> </bean>
-
-
-
构造器注入
-
使用
constructor-arg
属性 -
设置其name和ref子属性
-
设置其value子属性,用value子属性传值(传给构造函数)
-
<bean id="bookDao"class="BookDaoImpl"> <constructor-arg name="databaseName"value="mysql"/> <constructor-arg name="connectionNum"value="666"/> </bean>
-
-
-
依赖自动装配
- 是什么:Ioc容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程
- 自动装配方式
- byType:按类型进行注入(常用)
- byName:按照名称进行注入
- constructor:按照构造方法进行注入
- default:默认注入方式
- 使用:在bean中使用
autowire
参数 - spring容器会自动往前找对应的类型或者名称的bean,然后装配
-
总结

加载Properties属性文件
- 做法:通过 context:property-placeholder 标签
-
开启context命名空间
-
使用context命名空间
<?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" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
-
-
使用标签
<context:property-placeholder location="jdbc.properties"/>
-
在bean标签中使用值
<property name="name" value="${jdbc.username}"/>
-
不加载系统属性
<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)