原发布在个人公众号 rice 若初见似少年 2020-08-24 00:26
最近在看小马哥的springboot编程思想,整理一些知识点。
小马哥是谁,当然不是pony啦,哈哈。
六大特性:
独立的spring应用
嵌入web容器
固化的starter
自动装配
提供运维特性
无代码生成且无需xml配置
扩展阅读servlet3.0规范,JSR-xxx(java规范)
启动springboot应用
启动命令:
java-jarrice-1.0.0-RELEASE.jar
启动原理:
java -jar会找到/META-INF/MANIFEST.MS的Main-Class属性,此属性值为org.springframework.boot.loader.JarLauncher,该类会引导执行MANIFEST.MS的属性Start-Class,此属性值为我们项目的启动类,如com.rice.demo.Application.java。
另外还有WarLauncher,该类启动的是war包。
war包可以嵌入servlet容器,使用java -jar启动,也可以丢到tomcat等容器,使用tomcat启动,tomcat是如何启动的,就要去翻tomcat源码了。
org.springframework.boot.loader.JarLauncher
自动装配
配置加载2种方式:
@Configuration注解可以被@ComponentScan扫到并解析,适用于包内。
spring.factories文件可以被@EnableAutoConfiguration扫到并解析,适用于包外。
注解驱动编程
jkd1.5开始引入注解 @Override @Deprecated。
springframework2.5开始引入@Autowired @Qualifier @Component @Service @Controller @RequestMapping等,要配合标签使用。
springframework3.0开始引入@Import @ImportResource。
springframework3.1开始引入@ComponentScan @Profile。
springframework4.0开始引入@Conditional。
spring注解具有派生性,如@Service @Controller @Repository都是由@Component派生而来的。springframework3.0仅支持2层派生,springframework4.0开始支持多层派生。
<context:component-scan>解析流程:META-INF/spring/context.xmlMETA-INF/spring.handlers配置文件中指定了命名空间处理器org.springframework.context.config.ContextNamespaceHandler命名空间处理器绑定了标签解析器org.springframework.context.annotation.ComponentScanBeanDefinitionParser该解析器在spring解析xml文件遇到component-scan标签时回调。
注解驱动设计模式
web自动装配基于Servlet3.0的API实现。
配置条件装配:
springframework3.1开始引入@Profile
springframework4.0开始引入@Conditional,并使用该注解重新实现了@Profile。
网友评论