Create New Project
Spring Initializr
,同时选择JDK版本Group Artifact
,在Type
处选择Maven
管理项目,打包Packaging
为Jar
Web
,Spring Boot
版本号选择为2.0.3
Project name
和Project location
Controller
如图,新建a.hello.controller
包,并在该包下新建HelloWorldController.java
文件,代码如下:
@RestController
public class HelloWorldController {
@RequestMapping(name = "/index", method = RequestMethod.GET)
public String index() {
return "Hello World";
}
}
运行SbDemoApplication.java
,可以在控制台查看启动log。
通过浏览器访问http://localhost:8080/index
,可在页面看到Hello World
输出。
至此,Spring Boot
的第一个应用HelloWorld
搭建完毕。
pom.xml
简介具体描述解释信息,都在xml中,请自行查看。
<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.0modelVersion>
<groupId>com.happy.sbgroupId>
<artifactId>sb_demoartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>sb_demoname>
<description>Demo project for Spring Bootdescription>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.3.RELEASEversion>
<relativePath/>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-configuration-processorartifactId>
<optional>trueoptional>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
使用@SpringBootApplication
来标注一个主程序类,表明这是一个SpringBoot应用
@SpringBootApplication
public class SbDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SbDemoApplication.class, args);
}
}
@SpringBootApplication
该注解标注类为Spring Boot
的主配置类,Spring Boot
应该运行该类的main
方法来启动Spring Boot
应用。
该注解是一个复合注解,如下:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
// 略略略
}
@SpringBootConfiguration
标注在某个类上,表示这是一个Spring Boot
的配置类。
其源码为:
@Configuration
public @interface SpringBootConfiguration {
}
@Configuration
表示该类是一个配置类(类似xml配置文件),配置类也是容器中的一个组件@Component
。
@EnableAutoConfiguration
开启Spring Boot
自动配置功能
其源码为:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class>[] exclude() default {};
String[] excludeName() default {};
}
@AutoConfigurationPackage
:自动配置包
@Import
:Spring的底层注解,给容器导入组件
AutoConfigurationImportSelector
:导入组件选择器,将所有需要导入的组件以全类名形式返回,这些组件会被添加到容器中,其实就是给容器导入非常多的自动配置类(xxAutoConfiguration),并且配置好这些组件,
有了这自动配置类,就免去了手动编写配置注入功能组件等工作。
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);
Spring Boot
在启动的时候从类路径下的META-INF/spring.factories
中获取EnableAutoConfiguration
指定的值,将以前我们需要自己配置的内容,自动配置类都帮我们配置好了。
J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar
中。