SpringBoot入门
一、简单了解SpringBoot
SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
特点:
SpringBoot所具备的特征有:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置,开箱即用。
(7)准生产环境的运行时应用监控
(8)与云计算的天然集成
二、SpringBoot的开发
开发环境 :
IDE : idea 2018.3
JDK: jdk 1.8
Maven :3.5.4 必须是3.3以上的版本
Springboot:2.2.5
创建:参考SpringBoot官网
第一种:在idea中使用Maven创建
1.创建一个工程 (jar工程)。
2.导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/>
</parent>
-------------------------------------------------------
<!--配置springboot的启动器 web的启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.创建一个Controller
@Controller
public class TestController {
private String message;
@ResponseBody
@RequestMapping("/hello")
public String hello(){
this.message = "hello world";
return message;
}
}
4.创建一个程序执行入口(springboot启动类)@SpringBootApplication
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
5.执行main方法,启动SpringBoot
启动之后,访问:http://localhost:8080/hello
第二种:快速创建(使用idea)
必须有网络才能快速创建
1)file->new->project
选择Spring Initializr
默认https://start.spring.io/,但是由于外网可能加载很慢或者一直连不上。
这时可以选择http://start.aliyun.com。
2)点击Next
3)点击Next4)点击Next
5)点击Finish ,springboot项目快速创建完成。
三、SpringBoot的简单解析
1.父工程
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/>
</parent>
主要作用是:提供版本控制,定义配置文件的路径和类型。
2.WebMvc启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
导入SpringMvc的相关依赖。
webMvc的启动器:starter-xxx加载xxx框架的相关依赖,从而提供自动配置。
在SpringBoot提供大量的starters,用于集成第三方框架
3.启动类注解简单解析
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
@SpringBootApplication是一个复合注解
进入@SpringBootApplication注解
@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 {......}
1)、@SpringBootConfiguration
@Configuration:这个注解下面的类,代表是一个配置类,
相当于以前spring的配置文件
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
此注解底层就是一个组件,@Component
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
@AliasFor(
annotation = Component.class
)
String value() default "";
boolean proxyBeanMethods() default true;
}
2)、@ComponentScan配置扫描包下面的bean
3)、@EnableAutoConfiguration启用自动配置
@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 导入其他的类
@AutoConfigurationPackage 导入自动配置
自动配置类从哪里读取的呢?