Lecture03-容器-[实验01]创建工程,搭建环境

文章目录

    [toc]

    单词词性音标含义
    startern./ˈstɑːtə(r)/启动器(Spring Boot中的核心概念,是预配置的依赖集合,如spring-boot-starter-web包含Web开发所需的所有依赖,简化依赖管理)
    definitionn./ˌdefɪˈnɪʃn/定义(编程中常指组件或配置的声明,如Spring中Bean的definition描述了Bean的类型、依赖等元信息,用于容器创建Bean实例)
    Annotationn./ˌænəˈteɪʃn/注解(Java中的元数据标记,Spring大量使用注解简化配置,如@Controller标识控制器、@Service标识服务层、@Autowired实现依赖注入)

    Lecture03-容器-[实验01]创建工程,搭建环境

    一、说明

    由于以后实际开发中,我们肯定都是在SpringBoot环境下开发,而SpringBoot是Spring Framework的进一步简化和封装,所以我们直接在SpringBoot环境下学习Spring Framework


    二、创建工程

    1、创建普通module

    image-20250725100205696


    2、配置pom.xml

    ①继承SpringBoot

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>3.3.12</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    

    ②导入依赖

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <!-- 根据需要加入 -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            
            <!-- test starter 是为了引入测试相关环境 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    

    ③构建插件

    下面配置都是配合 Lombok 的使用,具体使用 Lombok 的时候再加也可以

    <build>
        <plugins>
            <!-- 配置 Lombok 参与 Maven 构建过程中的编译环节 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
    
            <!-- spring-boot-maven-plugin插件现阶段用不上,可以不加 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    3、创建主启动类

    SpringBoot 环境的要求:以主启动类中的 main() 方法作为整个程序的入口。语法层面的具体要求:

    • 类上必须标记 @SpringBootApplication 注解
    • 在 main() 方法中调用 SpringApplication.run(Module39MainType.class, args); 方法
      • 参数 1:主启动类.class 主启动类.class 是一个对象代表一个类的字节码文件(主启动类.class 字节码文件)
      • 参数 2:main() 方法的 args 参数

    image-20250725100751801

    package com.atguigu.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Module39MainType {
    
        public static void main(String[] args) {
            SpringApplication.run(Module39MainType.class, args);
        }
        
    }
    

    4、创建测试程序

    ①建包

    测试程序所在包要求:

    • 根据 Maven 的要求必须放在 src/test/java 目录下

    • 必须放在主启动类所在包或子包下

    ②创建测试类

    image-20260919090524102

    junit使用的是 Junit5 提供的 @Test 注解:

    image-20250725101513012

    // 必须导入了 spring-boot-starter-test 依赖,@SpringBootTest 注解才可以使用
    @SpringBootTest
    public class DemoTest {
    
        @Test
        public void test01() {
            // 单元测试的方法
        }
    
    }
    

    三、POM文件解读

    1、父工程

    为了使用SpringBoot中已经严格测试过的大量依赖,我们需要继承SpringBoot提供的父工程(想用吗?想用就叫爸爸,叫啊!)

    <parent>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-parent</artifactId>
        
        <!-- 这里就是具体使用的SpringBoot版本 -->
        <!-- 如有需要,可以在这里修改 -->
        <!-- 友情提示:其实并不是最新版最好 -->
    	<version>3.3.12</version>
    	<relativePath/> <!-- lookup parent from repository -->
    </parent>
    

    如果创建工程后,在 IDEA 中 SpringBoot 父工程爆红:

    image-20250523102800417

    可以通过运行Maven命令解决:

    mvn dependency:list
    

    列出当前Maven工程依赖列表,底层逻辑是:

    列出所有依赖,就需要确认每一个依赖;

    确认每一个依赖就需要从父工程读取依赖版本;

    从父工程读取依赖版本,就需要下载父工程对应的POM


    2、依赖列表

    <dependencies>
    	<!-- 基础 starter -->
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter</artifactId>
    	</dependency>
    	
    	<!-- 基于注解生成同样代码的工具类 -->
    	<dependency>
    		<groupId>org.projectlombok</groupId>
    		<artifactId>lombok</artifactId>
    		<optional>true</optional>
    	</dependency>
    	
    	<!-- SpringBoot 用于测试的 starter -->
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-test</artifactId>
    		<scope>test</scope>
    	</dependency>
    </dependencies>
    

    四、SpringBoot工程结构说明

    image-20250522232729221

    五、IoC容器对象登场

    run()方法的返回值,就是IoC容器对象:

    public static void main(String[] args) {
        ConfigurableApplicationContext ioc = SpringApplication.run(Module21SpringIocApplication.class, args);
        System.out.println("ioc = " + ioc);
    }
    

    执行main()方法:

    ioc = org.springframework.context.annotation.AnnotationConfigApplicationContext@d41f816, started on Thu May 22 23:28:49 CST 2025

    即使我们没有定义任何bean,IoC容器中仍然存在很多内置bean对象,我们可以读取它们的名称:

    String[] definitionNames = ioc.getBeanDefinitionNames();
    for (String definitionName : definitionNames) {
        System.out.println("definitionName = " + definitionName);
    }
    

    执行代码就运行主启动类中的 main() 方法就行

    IDEA提示 Use Service,可以点一下

    image-20250725102555176

    image-20250725102700035

    end