Springboot 入门认知
@(spring boot)[spring, springboot]
[TOC]
什么是Springboot
- 1.轻松创建独立应用程序
- 2.提供starter 简化依赖包的配置
- 3.开箱即用,尽可能的减少配置
- 4.内嵌 tomcat、jetty等web容器, 可以直接点击jar启动服务,无需war部署
快速创建
使用工具
SpringInitizer
或cli
工具,帮助我们快速选择组件构件项目
网页方式:
IDEA方式:
@IDEA版|center
做了什么
便于理解,需要Maven 相关基础
- 1.加入spring boot parent依赖,管理依赖starter的版本兼容性
- 2.加入选择组件的starter
感兴趣的可以深入了解一下 pom.xml 文件内的这个几个artifact:
spring-boot-starter-parent
spring-boot-starter-web
mybatis-spring-boot-starter
在spring boot的github上有源码!
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
starter管理依赖
习惯优于配置
spring boot核心理念
image.png这里我们已spring-boot-starter-web 来分析一下starter是如何进行依赖管理的
1.首先下载源码,打开项目目录, 里面啥代码都没有,只有一个pom文件
2.pom 分析
# parent: 这个我们不做深入分析啦
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starters</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
# 来看看 这个starter 里面配置了那些web 需要的依赖包,直接调到dependences
spring-boot-starter
spring-boot-starter-json
spring-boot-starter-tomcat
hibernate-validator
spring-web
spring-webmvc
# 其中核心的,我们关注spring-web、spring-webmvc 这两个,因为这是我们使用SpringMVC需要依赖的artifact(对应的版本兼容已经给出!),此外,还提供tomcat的依赖,应该是嵌入式的tomcat 有空深入研究.所以引入该starter ,SpringMVC 相关依赖就自动加载到当前项目中了.
自动化组件配置
- spring boot 相较传统的Spring的应用,最大的特点是去配置化.
习惯优于配置
.- 在spring boot 中是没有spring-xxx.xml等配置文件的(虽然说你可以使用注解替代xml配置,但是部分组件的配置还是需要xml去配置组装的,但是Spring boot是
完全
抛弃xml)所有的配置全部由autoConfiguration 来完成,在加入starter 后,通过condition 方式自动检测,进行配置(不是没有配置,而是使用自动配置, 我理解这应该就是所谓的习惯优于配置
)
下面我们用DispatcherServletAutoConfiguration 来分析一下SpringMVC 是如何进行自动化配置的
autoConfiguration
- @Configuration
个人理解: 用来修饰类,该类用来进行自动配置,内部被@Bean 注解的元素都将被配置到Spring工程当中(类似 spring-xxx.xml的功能)
- @Conditional
配合@Configuration使用, 用来判断是否对声明@Configuration的配置类进行自动配置,满足条件则该自动配置生效,启动时将自动将配置组织到spring工程当中.
当然, spring boot 提供的conditional注解有许多继承实现:
@ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)
@ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
@ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
@ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
@ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
@ConditionalOnNotWebApplication(不是web应用)
@ConditionalOnClass|center
DispatcherServletAutoConfiguration
# DispatcherServlet 在spring-mvc依赖包中,web starter引入
@ConditionalOnClass(DispatcherServlet.class)
# ServletRegistration 在tomcat 依赖保重, web starter引入
@ConditionalOnClass(ServletRegistration.class)
# 满足上述条件后 注入DispatcherServlet (还有相关配置,这里不赘述)
@Bean(name = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
public DispatcherServlet dispatcherServlet() {
DispatcherServlet dispatcherServlet = new DispatcherServlet();
dispatcherServlet.setDispatchOptionsRequest(
this.webMvcProperties.isDispatchOptionsRequest());
dispatcherServlet.setDispatchTraceRequest(
this.webMvcProperties.isDispatchTraceRequest());
dispatcherServlet.setThrowExceptionIfNoHandlerFound(
this.webMvcProperties.isThrowExceptionIfNoHandlerFound());
return dispatcherServlet;
}
全局配置文件
application.yml
IDEA 默认创建的是application.properties, 这里推荐使用yml(个人感觉可读性更好,大趋势也是在推yml)
# 配置服务端口
server:
port: 8080
web.xml 去哪了
传统Web应用,我们通过Web.xml 来配置web 容器中的servlet、filter、listener等信息,但是Springboot 是没有web.xml文件的。熟悉SpringMVC的同学,可能困惑啦,因为SpringMVC 的DispatchServlet 核心servlet便是在web.xml 中注册的。
了解上文的starte 与 autoConfiguration DispatchServlet 应该可以理解了)
自定义的servlet 、filter、listener如何配置了,答案是:
@Configuration
+ @Bean
+:FilterRegistrationBean\ServletRegistrationBean\ServletListenerRegistrationBean
网友评论