什么是SpringBoot?
SpringBoot,就是一个javaweb的开发框架,和SpringMVC类似,对比其他javaweb框架的好处,官方说是简化开发,约定大于配置, you can "just run",能迅速的开发web应用,几行代码开发一个http接口。
SpringBoot不用配置dispatchservlet,不用配置web.xml,它甚至内置了tomcat(默认启动服务器)
修改端口号,在它的配置文件下修改就可以
记得Springboot Maven也要解决静态过滤问题
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.txt</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
我们之后会发现Springboot整合其他的东西会非常方便,比如swagger,redis等等,是因为在springboot里面它已经帮你配置好了,并且化成了一个注解。
SpringBoot自动装配 分析
先点到主启动类
点击@SpringBootApplication注解
最重要的两个注解
先看@SpringBootConfiguration一个个点进去
@SpringBootConfiguration :springboot的配置 @Configuration :spring配置类 @Component :说明它也是spring的一个组件@EnableAutoConfiguration :自动配置 @AutoConfigurationPackage :自动配置包 @Import({Registrar.class}) :注册器 @Import({AutoConfigurationImportSelector.class}) :选择器
//获取候选的配置
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()); Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct."); return configurations; }
在这里出现了个文件:META-INF/spring.factories :这就是自动配置的核心
点进去,会发现有很多包, 这些包就是自动装配的时候就帮你配置好了的!
我们再回到
点进去
看到这里是不是发现连起来了?说到底就是通过加载META-INF/spring.factories里面的配置包,然后把加载的包放到配置文件里面去,让springboot去配置文件里面找这些配置
面试官问你你可以这样说,springboot是通过main方法下的SpringApplication.run方法启动的,启动的时候他会调用refshContext方法,先刷新容器,然后根据解析注解或者解析配置文件的形式祖册bean,而它是通过启动类的SpringBootApplication注解进行开始解析的,他会根据EnableAutoConfiguration开启自动化配置,里面有个核心方法ImportSelect选择性的导入,根据loadFanctoryNames根据classpash路径以MATA-INF/spring.factories下面以什么什么EnableAutoConfiguration开头的key去加载里面所有对应的自动化配置,他并不是把这一百二十多个自动化配置全部导入,在他每个自动化配置里面都有条件判断注解,先判断是否引入相互的jar包,再判断容器是否有bean再进行注入到bean容器