组件化系统快速应用之SpringBoot实践,这些你都了解吗?

身为Java开发人员,不可能不知道spring,spring如此强大,但它的配置却又让人觉得无比繁杂,好在spring社区也意识到了这点,推出了可以大大简化配置的SpringBoot,让Spring的使用重新变得简单,现在就让我们来学习一下SpringBoot的相关知识,文章会先介绍SpringBoot的一些主要配置,然后通过一个demo来讲解怎么使用,最后简单讲解SpringBoot自动配置的过程。

1. SpringBoot的优点

  1. 尽可能自动配置spring应用;

  2. 没有XML配置要求;

  3. 提供“starter poms”来简化maven配置;

  4. 可创建独立自运行的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==

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值