Spring Boot | 手动创建一个简单的Spring Boot项目

时间:2022-01-31 00:41:42

在上一章《00.创建多模块项目》中,笔者汪小成已经创建了一个空的01.spring-boot-hello子工程。本章中笔者汪小成开始着手编写一个简单地Spring Boot项目主启动类。

本篇文章主要内容:

  • 手动创建一个简单的Spring Boot项目
  • 简单地介绍下Spring Boot项目目录结构
  • @SpringBootApplication注解介绍说明

创建Spring Boot项目

1、在pom.xml文件中添加依赖;

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
</dependency>

因为笔者汪小成已经在父项目中使用spring-boot-dependencies引入Spring Boot 相关Maven依赖,所以这里不需要再为spring-boot-starter指定版本号。

2、在/src/main/java上单击鼠标右键New --> Package,输入包名:cn.ddcherry.springboot.demo

3、在cn.ddcherry.springboot.demo包上单击鼠标右键New --> Java Class,输入类名:App

App.java类的具体代码如下:

package cn.ddcherry.springboot.demo;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

import java.net.InetAddress;
import java.util.Arrays;

@Slf4j
@SpringBootApplication
public class App {
	public static void main(String[] args) throws Exception {
		// 获取本机IP地址
		String ip = InetAddress.getLocalHost().getHostAddress();
		log.info("本机ip: {}", ip);

		ApplicationContext context = SpringApplication.run(App.class);
		System.out.println("Bean个数: " + context.getBeanDefinitionCount());
		String[] beanNames = context.getBeanDefinitionNames();
		Arrays.sort(beanNames);
		System.out.println("########## Bean列表 ##########");
		Arrays.asList(beanNames).forEach(System.out::println);
	}
}

输出结果:

本机ip: 192.168.3.102
Bean个数: 44
########## Bean列表 ##########
app
applicationAvailability
applicationTaskExecutor
forceAutoProxyCreatorToUseClassProxying
lifecycleProcessor
mbeanExporter
mbeanServer
objectNamingStrategy
org.springframework.aop.config.internalAutoProxyCreator
org.springframework.boot.autoconfigure.AutoConfigurationPackages
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration
org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration
org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration
org.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration
org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration
org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration
org.springframework.boot.context.internalConfigurationPropertiesBinder
org.springframework.boot.context.internalConfigurationPropertiesBinderFactory
org.springframework.boot.context.properties.BoundConfigurationProperties
org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor
org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.methodValidationExcludeFilter
org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.event.internalEventListenerFactory
org.springframework.context.event.internalEventListenerProcessor
propertySourcesPlaceholderConfigurer
spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties
spring.jmx-org.springframework.boot.autoconfigure.jmx.JmxProperties
spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties
spring.sql.init-org.springframework.boot.autoconfigure.sql.init.SqlInitializationProperties
spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties
spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties
springApplicationAdminRegistrar
taskExecutorBuilder
taskSchedulerBuilder

Process finished with exit code 0

说明:

App.java只是一个用于演示的非常简单的Spring Boot项目主启动类。主要功能:

  • 获取本机IP地址;
  • ApplicationContext中获取Bean的数量、名称,在控制台打印;

文件目录介绍

  • /src/main/java:放置所有的Java文件;
  • /src/main/resources:放置所有的资源文件,包括静态资源文件、配置文件、页面文件等;
  • /src/test/java:放置单元测试类相关的Java文件;
  • /src/main/resources/static:放置静态资源文件,如HTML、CSS、JS、图片;
  • /src/main/resources/application.properties:Spring Boot项目配置文件。
  • /src/main/resources/templates:放置模板文件,如Thymeleaf、Freemarker、Velocity;

@SpringBootApplication注解

@SpringBootApplication注解是一个组合注解,由如下3个注解组合而成:

  • @SpringBootConfiguration:该注解的作用与@Configuration注解的作用完全相同,可以说是@Configuration注解的别名。使用该注解修饰的类将作为Java配置类。
  • @EnableAutoConfiguration:该注解用于启用Spring Boot的自动配置功能。
  • @ComponentScan:该注解用于指定自动扫描的基础包名,Spring容器会自动扫描包及其子包下符合条件的Bean,然后将这些Bean加载到Spring容器中。

Spring Boot系列文章