Springboot
1.springboot重要组件:
1.pom.xml
比如:
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- pom模型版本 maven为2-3都是4.0.0 -->
<modelVersion>4.0.0</modelVersion>
<!-- 当前继承了springboot提供的父项目(编码格式,) -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath />
</parent>
<!-- 项目描述信息 -->
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<!-- 自己指明当前项目的配置 -->
<properties>
<java.version>1.8</java.version>
<skipTests>true</skipTests>
<!-- <start-class>com.example.demo.HelloWorld</start-class> -->
</properties>
<!-- 注入依赖 -->
<dependencies>
<!-- starter===>启动器 ,作用:简化依赖 spring-boot-starter 是springboot的核心启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--web启动器,管理web的jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<scope>test</scope>
</dependency>
<!--测试启动器,管理测试需要的jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<!-- 屏蔽掉原来的依赖,使用我们自己需要的依赖,使用springboot中的test依赖 -->
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 配置maven插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在pom.xml文件中,springboot的maven插件能够以maven文件的方式提供支持。这个插件能够将springboot应用打包成可执行的jar/war文件,以普通的jar文件打包运行springboot。
命令:
1.spring-boot:repackage,默认goal。
执行的是二次打包,保留第一次打包的项目信息。
2.spring-boot:run :来启动项目
3.spring-boot:build-info:生成配置文件信息
打包过程:
找到相应执行栏,输入clean package
2.程序入口类
springboot程序需要一个程序入口,在一个类中有主方法,并且加上专用的注解@SpringBootApplication,那么这个类就是程序注解类。
这个注解的功能是
1.让这个类称为一个配置类
2.可以自动扫描用户的包
3.最重要的是:开启springboot的自动配置功能
3.测试类
使用不同的springboot,那么相对的test文件也会不同。在这个类中加上注解@SpringBootTest即可
注意的是:测试类比如和程序入口类在同包下,或者是子包下的关系在可以执行代码!!
如果测试类和入口类(配置类)的位置比较复杂或者混合,也可以自己去明确指定
@SpringBootTest(classes={DemoApplication.class})
class Demo ApplicationTests{
@Test
void contextLoads(){
}
}
4.配置文件
在Springboot项目中,有一个配置文件就可以了
springboot的配置文件,默认支持俩种方式:1.properties文件application.properties(平铺式)
server.port=8081
server.servlet.context-path=/
server.tomcat.uri-encoding=utf-8
2.yaml文件application.yml(层叠式)
server:
port:8082
servlet:
context-path:/
tomcat:
uri-encoding:utf-8
俩种文件的配置内容一致,但是配置的
格式不同。俩个文件同时存在,优先使用properties文件中的配置。
2.快速构建项目:
(下面三种方式,如果有需要的话可以留言,后续出文章)
1.在线使用initizr生成基本的项目
2.使用springboot-cli工具生成项目
3.在STS中直接创建springboot项目
3.自动配置
1.javaconfig
1.Xml配置方式
2.Annotation配置方式
3.JavaConfig配置方式
前俩种都是spring中的,而在boot中使用javaconfig配置。
User和Group类要配置到spring容器中
如果是xml方式的话,就是在xml中配置标签即可
如果是annotation方式的话,在类上面加入@Component注解即可
如果是JavaConfig方式的话,编写一个java的配置类,类上使用@Configuration注解,再配置上bean注入注解
@Configuration
public class AppConfig{
@Bean
public User user(Group group){
User user=new User(); user.setGroup(group);
return user;
}
@Bean
public Group group(){
return new Group();
}
}
该配置类放到springboot入口类的包下或者其子包下,会被自动扫描读取到,其本质上和xml配置以及annotation配置的原理是一样的,只是变了另一种形式。
测试类:
@SpringBootTest
class DemoApplicationTests{
@Autowired
private Useruser;
@Test void contextLoads(){ System.out.println(user);
System.out.println(user.getGroup());
}
}
再次申明:和入口类同包或子包下面的配置类可以被自动扫描到并读取。
2.autoconfig
什么是springboot中的自动配置:
例如springmvc框架,我们不几乎不需要做任何配置,就可以使用到springmvc中的功能并且成功运行。这就是因为引入springmvc框架后,springboot就已经自动帮我们把这个框架都默认配置好了。
但是在配置的关键是:
每个配置类中,都可以添加条件注解,来判断是否满足某一个条件,从而决定是否读取该配置类.如果不满足那么一定不会进行自动配置。
具体流程如下 :
- 程序入口类上使用 @SpringBootApplication 注解
- @SpringBootApplication 注解又包含了@EnableAutoConfiguration(开启自动配置) 注解
- @EnableAutoConfiguration 注解又导入(@Import)了 AutoConfigurationImportSelector (自动配置选项器)类
- AutoConfigurationImportSelector 中,定义了一个方法 getCandidateConfigurations(获取后代的自动配置)
@Configuration(proxyBeanMethods = false)//规定这个方法必须是false
@ConditionalOnWebApplication(type = Type.SERVLET)//必须是web项目
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class,
WebMvcConfigurer.class })//必须有这些class文件
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)//必须不能有这个类
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class,
TaskExecutionAutoConfiguration.class,
ValidationAutoConfiguration.class })
//如果这些要求都符合了才可以自动配置
public class WebMvcAutoConfiguration {
//..
}