1.创建HelloWorld项目
2.在pom.xml中添加springBoot依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
2.1 版本控制
```xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
他的父项目是
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
他来真正管理Spring Boot应用里面的所有依赖版本;
``` springBoot的版本仲裁中心,以后我们导入的依赖默认是不需要声明版本的(没有在dependencies中声明的版本自然需要声明版本)
2.2 启动器
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
```
**spring-boot-starter**- ==web==
spring-boot-starter:spring-boot场景启动器,帮我们导入web项目正常运行所需要的依赖;springBoot将所有场景功能抽取出来,做成一个个starter(启动器),只需要在相关的场景引入这些starter,该场景需要的依赖就会引入。即需要什么功能就导入什么场景。
3.主程序,入口类
/** * @SpringBootApplication 说明这是个springBoot程序 */ @SpringBootApplication public class HelloWorldApplication { public static void main(String[] args){ //springBoot应用启动起来 SpringApplication.run(HelloWorldApplication.class,args); } }
***通过该类中的main方法来启动springBoot程序
4.控制类,返回helloWorld
/** * hello控制类 */ @Controller public class HelloController { @ResponseBody @RequestMapping("/login") public String hello(){ return "helloWorld"; } }
5.@SpringBootApplication详解
```java
@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的配置类;
标注在某个类上,表示这是一个Spring Boot的配置类;
@**Configuration**:配置类上来标注这个注解;
配置类 ----- 配置文件;配置类也是容器中的一个组件;@Component
@**EnableAutoConfiguration**:开启自动配置功能;
以前我们需要配置的东西,Spring Boot帮我们自动配置;@**EnableAutoConfiguration**告诉SpringBoot开启自动配置功能;这样自动配置才能生效;
```java
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
```
@**AutoConfigurationPackage**:自动配置包
@**Import**(AutoConfigurationPackages.Registrar.class):
Spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class;
==将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;==
@**Import**(EnableAutoConfigurationImportSelector.class);
给容器中导入组件?
**EnableAutoConfigurationImportSelector**:导入哪些组件的选择器;
将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;
会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件; ![自动配置类](images/搜狗截图20180129224104.png)
有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);