Spring入门程序
Spring入门程序
本章将带你从零开始创建第一个Spring程序,了解Spring框架的基本使用方法。
前置要求
- 已安装JDK 17或更高版本
- 已安装Maven 3.8.6或更高版本
- 已安装IDEA 2022或更高版本
Spring框架下载
官方网站
下载步骤
下载方式
Spring框架可以通过以下两种方式获取:
- Maven依赖(推荐):直接在项目中添加依赖
- 手动下载:从GitHub下载jar包
手动下载详细步骤
进入Spring官网,点击"GitHub"链接
在GitHub页面找到"Access to Binaries"链接
找到下图"Spring Repositories"位置,点击超链接
按照下图步骤操作
继续在springframework目录下找下图的spring,点开之后你会看到很多不同的版本
选择对应的版本
点击上图的url
解压后就可以得到看到
docs
:API帮助文档libs
:Spring框架的jar文件schema
:XML配置文件约束
Spring的jar文件说明
核心jar包
jar文件 | 描述 |
---|---|
spring-core | Spring框架基本的核心工具类 |
spring-beans | IoC核心,包含访问配置文件、创建和管理bean等功能 |
spring-context | Spring核心扩展,ApplicationContext特性支持 |
spring-aop | AOP特性支持 |
spring-expression | Spring表达式语言支持 |
重要提示
如果只想使用Spring的IoC功能,仅需要引入spring-context
依赖即可,它会自动引入其他必需的依赖。
第一个Spring程序
环境准备
1. 创建Maven项目
spring6-001-first/
├── src/
│ ├── main/
│ │ ├── java/
│ │ └── resources/
│ └── test/
│ └── java/
└── pom.xml
2. 配置pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>spring6-001-first</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<spring.version>6.0.0</spring.version>
</properties>
<dependencies>
<!-- Spring Context依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- JUnit测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
编写代码
3. 创建Bean类
package com.example.bean;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 用户实体类
* 演示Spring IoC容器管理的Bean
*/
@Data
@NoArgsConstructor
public class User {
private String name;
private Integer age;
public User(String name) {
this.name = name;
System.out.println("User有参构造方法执行");
}
}
4. 创建Spring配置文件
在src/main/resources
目录下创建beans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置User Bean -->
<bean id="userBean" class="com.example.bean.User"/>
<!-- 也可以配置JDK自带的类 -->
<bean id="dateBean" class="java.util.Date"/>
</beans>
Bean配置说明
id
:Bean的唯一标识符,类似身份证号class
:要创建的Java对象的全限定类名
5. 编写测试类
package com.example.test;
import com.example.bean.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest {
@Test
public void testFirst() {
// 初始化Spring容器(解析配置文件,创建Bean对象)
ApplicationContext context =
new ClassPathXmlApplicationContext("beans.xml");
// 根据id获取Bean对象
Object userBean = context.getBean("userBean");
System.out.println(userBean);
// 指定类型获取Bean,避免强制转换
User user = context.getBean("userBean", User.class);
System.out.println(user);
}
}
运行结果
运行测试方法,控制台输出:
com.example.bean.User@12345678
User(name=null, age=null)
程序详细分析
Spring对象创建机制
重要原理
Spring通过反射机制调用类的无参构造方法来创建对象:
// Spring内部实现原理(简化版)
Class clazz = Class.forName("com.example.bean.User");
Object obj = clazz.newInstance();
因此,要让Spring创建对象,必须提供无参构造方法。
常见问题解答
1. Bean的id可以重复吗?
不可以。如果配置了相同的id,后面的配置会覆盖前面的配置。
2. 配置文件名必须是beans.xml吗?
不是。配置文件名可以任意指定:
// 可以指定任意名称的配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
// 也可以同时加载多个配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("beans.xml", "spring.xml");
3. 可以配置JDK自带的类吗?
可以。只要类不是抽象的,且提供了无参构造方法:
<bean id="dateBean" class="java.util.Date"/>
<bean id="listBean" class="java.util.ArrayList"/>
4. 如何避免类型转换?
使用getBean(String name, Class<T> requiredType)
方法:
// 避免强制类型转换
User user = context.getBean("userBean", User.class);
Date date = context.getBean("dateBean", Date.class);
ApplicationContext vs BeanFactory
容器层次结构
BeanFactory
:Spring容器的顶级接口ApplicationContext
:BeanFactory的子接口,提供更多企业级功能
推荐使用ApplicationContext
,功能更强大。
配置日志框架
添加Log4j2依赖
<!-- Log4j2日志依赖 -->
<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
在src/main/resources
目录下创建log4j2.xml
:
log4j2.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<loggers>
<!--
日志级别:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
-->
<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>
使用日志
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SpringTest {
private static final Logger logger = LoggerFactory.getLogger(SpringTest.class);
@Test
public void testFirst() {
logger.info("开始测试Spring容器");
ApplicationContext context =
new ClassPathXmlApplicationContext("beans.xml");
User user = context.getBean("userBean", User.class);
logger.info("获取到用户对象:{}", user);
}
}
小结
通过本章学习,你已经掌握了:
✅ Spring框架的下载和环境搭建
✅ Maven项目中集成Spring依赖
✅ 创建第一个Spring程序
✅ Spring配置文件的基本语法
✅ ApplicationContext容器的使用
✅ Spring对象创建的基本原理
✅ 日志框架的集成配置
下一步
接下来我们将学习Spring的核心特性——依赖注入(DI),了解如何通过Spring管理对象之间的依赖关系。