一、开发SpringBoot项目通常是这样:
- 引入依赖
- 添加注解
- 书写配置文件
springboot两个核心思想起步依赖和自动配置。就像官网说的:
使用Spring Boot可以轻松地创建独立的,基于生产级别的基于Spring的应用程序,您可以“运行”它们。
二、我们新建一个SpringBoot项目,从上面我们知道大概是是三个地方:pom.xml 和 xxxApplication启动程序,application.properties
(1) spring-boot-starter-parent:
https://segmentfault.com/a/1190000018854658
当我们创建一个 Spring Boot 工程时,可以继承自一个 spring-boot-starter-parent
,也可以不继承自它,我们先来看第一种情况。先来看 parent 的基本功能有哪些?
1、定义了 Java 编译版本为 1.8 。
2、使用 UTF-8 格式编码。
3、继承自 spring-boot-dependencies
,里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
4、执行打包操作的配置。
5、自动化的资源过滤。
6、自动化的插件配置。
7、针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。
请注意,由于application.properties和application.yml文件接受Spring样式占位符 $ {...}
,因此 Maven 过滤更改为使用 @ .. @
占位符,当然开发者可以通过设置名为 resource.delimiter 的Maven 属性来覆盖 @ .. @
占位符。
有的时候,公司里边会有自己定义的 parent ,我们的 Spring Boot 项目要继承自公司内部的 parent ,一个简单的办法就是我们自行定义 dependencyManagement 节点,然后在里边定义好版本号,再接下来在引用依赖时也就不用写版本号了。
2、自动配置
@SpringBootApplication
public class SpringbootstartApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootstartApplication.class, args);
}
}
'''
@SpringBootApplication 点进去:主要就这三个注解,其他的是声明注解不用管
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
1、@SpringBootConfiguration 等于@Configuration注解,即让SpringBoot启动的时候能找到我们自定义的配置Bean
2、 @ComponentScan : 看字面意思可以理解为扫描加了@Conponent注解的类,平时我们大多使用@Controller,@Service
如果我们偷懒的话,也可以直接写@Conponent,因为他们也是基于@Conponent实现的
3、@EnableAutoConfiguration :加载SpringBoot启动时的第三方类,例如Tomcat/redis...
@EnableAutoConfiguration --> @Import(EnableAutoConfigurationImportSelector.class) -->
AutoConfigurationImportSelector,
这些类的全类名在spring.factories文件中。那么这些类放在哪里呢?就在spring-boot-autoconfiguration.jar下面:
2、为什么在application.properties中可以配置我们数据库或Tomcat...信息?
(1)SpringBoot为我们内嵌了很多类,如Tomcat/redis...要怎么加载
Spring Framework内部使用一种工厂加载机制(Factory Loading Mechanism)。这种机制使用SpringFactoriesLoader完成,SpringFactoriesLoader使用loadFactories方法加载并实例化从META-INF目录里的spring.factories文件出来的工厂,这些spring.factories文件都是从classpath里的jar包里找出来的。
这个属性配置文件就指明了springboot工程启动的时候需要做哪些自动配置:
spring.factories文件是以Java的Properties格式存在,key是接口或抽象类的全名、value是以逗号 " , " 分隔的实现类,举例自动化配置信息:这里都是类的全限定名,那么这些类放在哪里呢?就在spring-boot-autoconfiguration.jar下面:
所以我们可以根据类名修改配置。
三、SpringBoot的启动:https://www.cnblogs.com/trgl/p/7353782.html
每个SpringBoot程序都有一个主入口,也就是main方法,main里面调用SpringApplication.run()启动整个spring-boot程序,该方法所在类需要使用@SpringBootApplication注解,以及@ImportResource注解(if need),@SpringBootApplication包括三个注解,功能如下:@EnableAutoConfiguration:SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置
@SpringBootConfiguration(内部为@Configuration):被标注的类等于在spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个spring的上下文环境
@ComponentScan:组件扫描,可自动发现和装配Bean,默认扫描SpringApplication的run方法里的Booter.class所在的包路径下文件,所以最好将该启动类放到根包路径下
有一点需要记住,SpringBoot是基于SpringFramework的,所以启动时肯定是先初始化IOC容器。
启动主要创建了配置环境(environment)、事件监听(listeners)、应用上下文(applicationContext),并基于以上条件,在容器中开始实例化我们需要的Bean,至此,通过SpringBoot启动的程序已经构造完成。