使用SpringBoot 创建一个Maven 工程
-jdk 1.8:Spring Boot 推荐jdk1.7及以上;
-maven3.x:maven 3.3以上版本;
给maven 的settings.xml配置文件的profiles标签添加:(设置使用的jdk版本)
jdk-1.8
true
1.8
1.8
1.8
1.8
开发工具中的maven设置为自己配置的maven
1、导入SpringBoot 相关的依赖
org.springframework.boot
spring-boot-starter-parent
2.2.1.RELEASE
org.springframework.boot
spring-boot-starter-web
2、编写一个主程序,启动Spring Boot 主应用
package cn.clboy.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Author cloudlandboy
* @Date 2019/11/13 下午2:58
* @Since 1.0.0
* springBootApplication:标注一个主程序类,表示这个是一个Springboot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
//启动
SpringApplication.run(HelloWorldMainApplication.class, args);
}
}
其中使用了 @SpringBootApplication 注解与 SpringApplication 的run 方法
3、编写一个Controller
package cn.clboy.springboot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author cloudlandboy
* @Date 2019/11/13 下午3:05
* @Since 1.0.0
* RestController:是spring4里的新注解,是@ResponseBody和@Controller的缩写。
*/
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello SpringBoot,this is my first Application";
}
}
@RequestMapping 分发路径,@RestController 标记为该类为一个控制类
4、运行主程序Main分发测试
5、访问 localhost:8080/hello
1、添加maven 插件
org.springframework.boot
spring-boot-maven-plugin
2、使用mvn package 进行打包
3、进入打包好的jar 包所在目录
4、使用 java -jar jar包名称 运行
步骤如下:
pom.xml 文件中添加插件后,运行package如图所示
然后运行jar
进行访问
org.springframework.boot
spring-boot-starter-parent
2.2.1.RELEASE
org.springframework.boot
spring-boot-dependencies
2.2.1.RELEASE
../../spring-boot-dependencies
org.springframework.boot
spring-boot-starter-web
Spring-boot-starter-web:
spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件;
Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
//启动
SpringApplication.run(HelloWorldMainApplication.class, args);
}
}
@SpringBootApplication
:
Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
看一下@SpringBootApplication
这个注解类的源码
@Target({ElementType.TYPE}) //可以给一个类型进行注解,比如类、接口、枚举
@Retention(RetentionPolicy.RUNTIME) //可以保留到程序运行的时候,它会被加载进入到 JVM 中
@Documented //将注解中的元素包含到 Javadoc 中去。
@Inherited //继承,比如A类上有该注解,B类继承A类,B类就也拥有该注解
@SpringBootConfiguration
@EnableAutoConfiguration
/*
*创建一个配置类,在配置类上添加 @ComponentScan 注解。
*该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 。
*/
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication
@SpringBootConfiguration
:Spring Boot的配置类;标注在某个类上,表示这是一个Spring Boot的配置类;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration
@Configuration
:配置类上来标注这个注解;
配置类 ----- 配置文件;配置类也是容器中的一个组件;@Component
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration
@EnableAutoConfiguration
:开启自动配置功能;
以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration
@AutoConfigurationPackage
:自动配置包
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({Registrar.class})
public @interface AutoConfigurationPackage
@Import
:Spring的底层注解@Import,给容器中导入一个组件
导入的组件由org.springframework.boot.autoconfigure.AutoConfigurationPackages.Registrar
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;
这里controller包是在主程序所在的包下,所以会被扫描到,我们在springboot包下创建一个test包,把主程序放在test包下,这样启动就只会去扫描test包下的内容而controller包就不会被扫描到,再访问开始的hello就是404
@Import({AutoConfigurationImportSelector.class})
AutoConfigurationImportSelector.class
将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;
Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们完成了