Spring入门
官⽹地址:https://spring.io
官⽹地址(中⽂):http://spring.p2hp.com
Github:https://github.com/spring-projects/spring-framework
Spring 的安装
Spring 的jar包
Spring 8大模块:

Spring 的 jar 包一览:
| JAR文件 | 描述 |
|---|---|
| spring-aop-5.3.9.jar | 这个jar 文件包含在应用中使用Spring 的AOP 特性时所需的类 |
| spring-aspects-5.3.9.jar | 提供对AspectJ的支持,以便可以方便的将面向切面的功能集成进IDE中 |
| spring-beans-5.3.9.jar | 这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion ofControl / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。 |
| spring-context-5.3.9.jar | 这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。 |
| spring-context-indexer-5.3.9.jar | 虽然类路径扫描非常快,但是Spring内部存在大量的类,添加此依赖,可以通过在编译时创建候选对象的静态列表来提高大型应用程序的启动性能。 |
| spring-context-support-5.3.9.jar | 用来提供Spring上下文的一些扩展模块,例如实现邮件服务、视图解析、缓存、定时任务调度等 |
| spring-core-5.3.9.jar | Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 |
| spring-expression-5.3.9.jar | Spring表达式语言。 |
| spring-instrument-5.3.9.jar | Spring3.0对服务器的代理接口。 |
| spring-jcl-5.3.9.jar | Spring的日志模块。JCL,全称为"Jakarta Commons Logging",也可称为"Apache Commons Logging"。 |
| spring-jdbc-5.3.9.jar | Spring对JDBC的支持。 |
| spring-jms-5.3.9.jar | 这个jar包提供了对JMS 1.0.2/1.1的支持类。JMS是Java消息服务。属于JavaEE规范之一。 |
| spring-messaging-5.3.9.jar | 为集成messaging api和消息协议提供支持 |
| spring-orm-5.3.9.jar | Spring集成ORM框架的支持,比如集成hibernate,mybatis等。 |
| spring-oxm-5.3.9.jar | 为主流O/X Mapping组件提供了统一层抽象和封装,OXM是Object Xml Mapping。对象和XML之间的相互转换。 |
| spring-r2dbc-5.3.9.jar | Reactive Relational Database Connectivity (关系型数据库的响应式连接) 的缩写。这个jar文件是Spring对r2dbc的支持。 |
| spring-test-5.3.9.jar | 对Junit等测试框架的简单封装。 |
| spring-tx-5.3.9.jar | 为JDBC、Hibernate、JDO、JPA、Beans等提供的一致的声明式和编程式事务管理支持。 |
| spring-web-5.3.9.jar | Spring集成MVC框架的支持,比如集成Struts等。 |
| spring-webflux-5.3.9.jar | WebFlux是 Spring5 添加的新模块,用于 web 的开发,功能和 SpringMVC 类似的,Webflux 使用当前一种比较流程响应式编程出现的框架。 |
| spring-webmvc-5.3.9.jar | SpringMVC框架的类库 |
| spring-websocket-5.3.9.jar | Spring集成WebSocket框架时使用 |
Spring6 的安装
Spring6 支持的最低JDK版本是 JDK17。被称为“下一个十年的开端”。
Maven依赖配置:
<!--Spring6的正式版发布之前,这个仓库地址是需要的-->
<repositories>
<repository>
<id>repository.spring.milestone</id>
<name>Spring Milestone Repository</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
<dependencies>
<!--spring context依赖:使⽤的是6.0.0-M2⾥程碑版-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.0-M2</version>
</dependency>
</dependencies>
<!--Spring6 最低支持JDK17 -->
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>Spring 的入门程序
编写bean类
package com.guitar.spring6.beans; public class User { }编写 Spring 配置文件

image-20230626212333298 <?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"> // 创建由class指定的对象并由Spring管理 // 指定 id 以获取Spring管理的这个类的对象 <bean id="user" class="com.guitar.spring6.beans.User"></bean> </beans>使用 Spring 核心类解析配置
// 解析配置文件,获取spring上下文 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-test01.xml"); // 根据 id 获取配置文件中配置的 bean User user = applicationContext.getBean("user", User.class); // 指定第二个参数可以不用强转 // 使用即可 System.out.println(user);- ClassPathXmlApplicationContext 类是 ApplicationContext 接口的一个实现类,从类路径下加载配置文件(构造方法参数),解析为上下文对象并返回。
Spring 配置文件基础
Spring 配置文件没有命名、位置的要求,只要能使用正确的类加载、解析到即可。
类路径下,使用 ClassPathXmlApplicationContext 类解析(常用),还有别的类如:AnnotationConfigApplicationContext (解析类上的注解获得配置信息)、 FileSystemXmlApplicationContext(从文件系统中加载配置文件,少用)。
// BeansException extend NestedRuntimeException extend RuntimeException
// BeansException 是运行时异常,无需显示处理
public ClassPathXmlApplicationContext(String configLocation) throws BeansException {
// ...
}
// 可变长参数,接收多个配置文件来解析一个上下文
public ClassPathXmlApplicationContext(String... configLocations) throws BeansException {
// ...
}一组配置文件对应一个Spring上下文对象,在构造函数参数中,越靠前的配置文件优先级越高,即使不同的配置文件中有相同的id,哪个配置文件在前,就哪个配置文件的 id 被保留,getBean获取的也是这个<bean>。
<bean id="user" class="com.guitar.spring6.beans.User"></bean>一个配置文件中的 bean 的 id 唯一,如不唯一则解析配置文件时(生成Spring上下文对象时)报错。
<bean> 标签指明一个Spring容器所管理的对象(单例)或对象的管理方式(prototype 非单例,指明id以在配置文件中引用,或在程序中从容器中获取该类的对象。
默认情况下,在解析配置文件时,底层通过反射调用无参数的构造方法进行对象的构建,如果没有无参构造,则解析配置文件时报错。
伪码:
// dom4j解析beans.xml⽂件,从中获取class的全限定类名
// 通过反射机制调⽤⽆参数构造⽅法创建对象
Class clazz = Class.forName("com.powernode.spring6.bean.User");
Object obj = clazz.newInstance();如果指明了id,则这个bean会被放入一个Map集合中,需要时从这个集合中取出:

getBean方法
getBean() 是 超级父接口 BeanFactory 中的方法,BeanFactory 没有父接口,ApplicationContext 是它的子接口。
getBean(String beanID); // 返回OBJ
getBean(String beanID, Class<T> type); // 返回指定类型 T- 当 beanID(name) 不存在时,直接报错,不返回
null。
Spring6启用Log4j2日志框架
从Spring5之后,Spring框架支持集成的⽇志框架是Log4j2,启用步骤:
引入 Log4j2 的依赖
<!--log4j2的依赖,需要2个jar包--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.19.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j2-impl</artifactId> <version>2.19.0</version> </dependency>在类的根路径下提供 log4j2.xml 配置文件(文件名、文件路径固定)
<?xml version="1.0" encoding="UTF-8"?> <configuration> <loggers> <!-- level指定日志级别,从低到高的优先级: ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF --> <!--记录最低DEBUG级别的日志--> <root level="DEBUG"> <appender-ref ref="spring6log"/> </root> </loggers> <appenders> <!--输出日志信息到控制台--> <console name="spring6log" target="SYSTEM_OUT"> <!--控制日志输出的格式--> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss SSS} [%t] %-3level %logger{1024} - %msg%n"/> </console> </appenders> </configuration>使用日志框架,输出指定的日志信息
// 在需要的地方主动记录日志 // 1. 获取日志记录器 Logger logger = LoggerFactory.getLogger(this.getClass()); // 2. 按照需求记录不同级别的日志信息 logger.info("普通消息"); logger.debug("调试消息"); logger.error("错误消息");在如上的配置下(记录最低DEBUG级别),日志信息为:
2023-06-26 22:36:58 169 [main] INFO com.guitar.spring6.SpringTest01 - 普通消息 2023-06-26 22:36:58 169 [main] DEBUG com.guitar.spring6.SpringTest01 - 调试消息 2023-06-26 22:36:58 170 [main] ERROR com.guitar.spring6.SpringTest01 - 错误消息
