身为Java开发人员,不可能不知道spring,spring如此强大,但它的配置却又让人觉得无比繁杂,好在spring社区也意识到了这点,推出了可以大大简化配置的SpringBoot,让Spring的使用重新变得简单,现在就让我们来学习一下SpringBoot的相关知识,文章会先介绍SpringBoot的一些主要配置,然后通过一个demo来讲解怎么使用,最后简单讲解SpringBoot自动配置的过程。
1. SpringBoot的优点
-
尽可能自动配置spring应用;
-
没有XML配置要求;
-
提供“starter poms”来简化maven配置;
-
可创建独立自运行的spring应用。
下面分别阐述。
1.1 尽可能自动配置
SpringBoot会根据项目中添加的jar依赖猜测开发人员想要如何配置Spring从而自动配置。例如若项目中依赖的jar里有spring-webmvc的包,那么会自动创建并注册相关的bean,如DispatcherServlet、viewResolver等,无需再手动在springMvc的xml配置文件中手动创建和注册。
1.2 没有XML配置要求
SpringBoot不推荐使用XML的spring配置,提倡使用编程式的JavaConfig方式(@Configuration等)进行配置,当然为了照顾更熟悉XML配置的开发人员,依然可以使用XML方式。
例如传统XML方式的配置:
Java
对应的编程式配置:
Java
从以上对比可以看出@Configuation等价于<beans></beans>,即相当于一个xml中的配置;@Bean等价于<bean></bean> ,其中@Scope默认情况下是singleton,使用了@Bean注解的方法的方法名就是bean在spring容器中的id。当然,若是XML配置无法避免,也可以通过如下方式引入XML:
Java
使用@ImportResource,引入在xml中配置的spring bean。
使用XML还是编程式配置哪种方式更好?见仁见智,个人更偏向编程式配置:
优点:
注册bean更直观; 更容易实现自动配置(starter)。
缺点:
配置更改,就必须重新编译应用程序。但在如今容器化的大趋势下,配置文件也是版本发布管理中的一环,更改配置文件也应该重新发布版本以方便回滚,因此这个缺点被弱化。
1.3 提供“starter poms”来简化maven配置
SpringBoot提供了很多常用的配置,打包为starter,只要项目引入依赖即可使用,其中最常用的要数spring-boot-test-starter、spring-boot-web-starter、spring-boot-starter,其定义了很多常用jar的版本配置,项目中依赖的时候无需再指定版本,且SpringBoot保证这些版本的兼容性。
Java
1.4 可创建独立自运行的spring应用
我们的大多数项目都是web项目,很多时候都是部署在一个外置的web容器比如tomcat中,SpringBoot除了支持此方式外,更可以打包一个可以自运行的、包含内嵌tomcat容器的部署包,无需外置的web容器,只要有jdk环境就可以运行。打包出来的jar或者war,只需要在命令行窗口中执行 java –jar xxxx.jar即可启动一个web服务。
2. SpringBoot主要配置说明
下面介绍SpringBoot的几个主要注解配置
2.1 主配置类上的@SpringBootApplication
Java
@SpringBootApplication
该注解只能出现一次,其使用了@EnableAutoConfiguration、@ComponentScan和@SpringBootConfiguration注解:
1) @EnableAutoConfiguration,说明启用自动配置,此注解可以说是SpringBoot最智能的一个标签,它告诉SpringBoot根据添加的jar依赖猜测你想如何配置spring,从而自动注册bean,无需手动配置;
2) @ComponenScan, 配置扫描的包及其子包中所有配置例如@Configuration、@Component、@Service等,相当于XML配置中的<ComponentScan> 默认会扫描使用了@SpringBootApplication注解的类所在的包;
3) @SpringBootConfiguration,标识应用为一个SpringBoot应用,且使得自身成为了一个@Configuration,可以定义Bean。
Java
3. SpringBoot配置的例子
前面说了那么多,也许还是一头雾水,下面我们通过一个典型的例子来说明SpringBoot简化配置的地方:maven构建的SpringMvc +Mybatis+Mysql数据库的典型web框架配置。
3.1 新建Maven项目
设置parent为spring-boot-starter-parent、添加依赖。
之所以设置parent为spring-boot-starter-parent,是由于其定义了很多常用的artifact的版本,且SpringBoot保证这些版本之间的正常工作,例如截图中关于mysql的驱动,我们就不用再指定版本了,因为spring-boot-starter-parent中已经定义。同时将tomcat的starter的依赖范围设置为provided,这样打包出来的war将不包含内嵌的tomcat。
3.2 编写主配置类
@SpringBootApplication只能出现一次,scanBasePackages, 配置扫描的包及其子包, 默认会扫描使用了@SpringBootApplication注解的类所在的包;
@MapperScan是mybatis-spring提供的功能, 扫描mybatis的mapper接口所在的包,可放到其他使用@Configuration注解的配置类中;
主配置类继承SpringBootServletInitializer类, 这样生成的war可以放到外部tomcat中部署。
3. 3 主配置文件application.properties
SpringBoot默认读取application.properties中的配置,读取出的所有配置都放在Environment类的实例中; IDE中凡是可以自动化配置的项,IDE都会有提示和自动补全功能。关于application.properties的存放位置,有如下优先级:
1) 与jar包同一目录下的config文件夹中;
2) Jar包所在文件夹下;
3) 项目classpath下的config文件夹中;
3) classpath。
截图中的配置,SpringBoot将会自动创建一个数据库连接池,初始化SpringMvc的DispatcherServlet、ResourceHandler、日期格式,扫描mybatis映射文件等。
3.4 其他额外配置文件(若有)
其他配置放在额外的properties配置文件
然后通过以下方式引入:
通过@Configuration和@PropertySource引入。
3.5 其他XML方式配置的spring bean(若有)
其他自定义的spring xml配置可通过@Configuration和@ImportResource引入:
Java
3.6 demo配置小结
除了都需要的mybatis映射文件,以上就是一个使用maven构建的基于SpringMvc +Mybatis+Mysql数据库的典型web框架配置,我们总结一下,要做的配置仅仅是以下3步:
1) 添加依赖
2)配置启动类
src/main/java/com/jd/lzq/mainApp
3)配置文件
src/main/resources/application.properties
而反观传统的配置:
想想看相比传统的基于XML配置的Spring项目,是不是简化了很多!而这一切都是因为SpringBoot的@EnableAutoConfiguration。
以上是SpringBoot的配置入门,更多配置见官方文档介绍:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
SpringBoot只是让Spring的配置变得简单,其底层依赖的还是Spring,我们依然要理解Spring的原理。
4. SpringBoot自动配置原理简析
关于SpringBoot的@EnableAutoConfiguration自动配置机制,可以使用下图看看流程,在此抛砖引玉,以后有机会再详细讲解。
Java
@EnableAutoConfiguration
其使用了注解:
@Import(EnableAutoConfigurationImportSelector)
在SpringBoot应用启动过程中,EnableAutoConfigurationImportSelector类会调用SpringFactoriesLoader的load方法,从jar包中读取META-INF/spring.factories文件,而该文件中定义了很多使用@Configuration注解的配置类,这样就读取到了starter包中定义的配置类。
@Configuration的解析:
由ConfigurationClassPostProcessor类来完成
其实现了BeanDefinitionRegistryPostProcessor接口, 该接口允许往spring容器中添加bean的定义,从而实现自动配置。我们也可以利用此原理,开发自定义的starter,实现公司内部常用组件的自动化配置。也正是借此原理,SpringBoot提供了非常多的常用工具的starter, 且starter的数量依然在持续增加中,大大简化了配置。例如我们常用的数据库连接池druid,官方也提供了starter方便开发。
<结语>
以上就是SpringBoot的介绍,其配置很简单,但是功能很强大,适合当今微服务化要求快速开发、轻量化的趋势,且实现的starter数量还在持续增加中,掌握其原理和用法,可以大大提高我们的开发效率。在使用过程中遇到问题,善于查询官方文档,也欢迎联系我们交流关于SpringBoot的使用。
Java资料分享,复制下段链接到浏览器即可
data:text/html;charset=UTF-8;base64,5oGt5Zac5L2g77yM5p625p6E5biI5a2m5Lmg576k5Y+35pivNjg2NTc5MDE0Cg==