Spring Boot项目启动时执行的类与注解

在Spring Boot应用中,我们经常需要在应用启动时执行一些初始化的操作,例如加载配置文件、连接数据库、初始化缓存等。Spring Boot提供了一种简单的方式来实现这一需求,即使用特定的注解来标识一个类,在应用启动时自动执行。

@PostConstruct注解

在Spring Boot中,我们可以使用@PostConstruct注解来标识一个方法,在应用启动时自动执行。这个注解是javax包中的注解,不需要额外引入依赖。

首先,我们需要创建一个带有@PostConstruct注解的方法。这个方法可以有任意名称和参数,但不能有返回值。示例如下:

import javax.annotation.PostConstruct;

public class MyInitializer {
    
    @PostConstruct
    public void init() {
        // 在应用启动时执行的初始化操作
        System.out.println("应用启动时执行的初始化操作");
    }
}

接下来,我们需要将这个类注册为Spring的一个Bean。可以使用@Component注解或者@Bean注解来实现。示例如下:

import org.springframework.stereotype.Component;

@Component
public class MyInitializer {
    
    @PostConstruct
    public void init() {
        // 在应用启动时执行的初始化操作
        System.out.println("应用启动时执行的初始化操作");
    }
}

或者

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfig {
    
    @Bean
    public MyInitializer myInitializer() {
        return new MyInitializer();
    }
}

无论是使用@Component注解还是@Bean注解,都能够将MyInitializer类注册为Spring的一个Bean,并在应用启动时执行init()方法。

应用启动流程

了解应用启动时执行的类和注解之前,我们先来了解一下Spring Boot应用的启动流程。

  1. 加载应用配置:Spring Boot会加载应用的配置文件,例如application.propertiesapplication.yml
  2. 实例化Spring容器:Spring Boot会初始化一个Spring容器,用来管理各个Bean。
  3. 扫描注解:Spring Boot会扫描所有的@Component注解,将标记为Component的类注册为Bean。
  4. 自动配置:Spring Boot会根据应用的依赖关系和配置,自动配置一些常用的Bean,例如数据源、事务管理器等。
  5. 注册其他Bean:应用可以通过@Bean注解或其他方式,注册一些额外的Bean。
  6. 启动应用:Spring Boot会启动应用,执行启动时的初始化操作。

示例应用

为了更好地理解应用启动时执行的类和注解,我们创建一个简单的示例应用。该应用在启动时打印一条初始化信息,并在Web页面上展示一些数据。

首先,我们创建一个Spring Boot应用。可以使用Spring Initializr快速生成一个基础的Spring Boot项目,也可以手动创建一个Spring Boot项目。

接下来,我们创建一个初始化类MyInitializer,在其init()方法中打印一条初始化信息。

import javax.annotation.PostConstruct;

import org.springframework.stereotype.Component;

@Component
public class MyInitializer {
    
    @PostConstruct
    public void init() {
        // 在应用启动时执行的初始化操作
        System.out.println("应用启动时执行的初始化操作");
    }
}

然后,我们创建一个控制器类MyController,定义一个处理请求的方法,并返回一个包含数据的视图。

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MyController {

    @GetMapping("/")
    public String index(Model model) {
        // 设置模型数据
        model.addAttribute("message", "欢迎使用Spring Boot");
        
        // 返回视图名称
        return "index";
    }
}

最后,我们创建一个Thymeleaf模板index.html,用于展示数据。

<!DOCTYPE html>
<html xmlns:th="
<head>
    <meta charset="UTF-8">
    <title>Spring Boot示例应用</title>
</head>
<body>
    
</body>
</html>

现在,我们可以启动应用,并