技术成就梦想

代码如诗

原 springboot 入门教程(3)-运行原理、关键注解和配置 pxk

2017年9月11日 开源项目 0

    springboot提倡约定优于配置的思想,所以提供了很多默认配置,所以大家才会发现搭建一个应用会非常简单,只需要简单几行代码就搞定一个组件的集成。

    那我们就来深入了解下他的原理和关键配置。

1、基本配置

    springboot基本都是通过一个入口类来启动应用,一般命名为Application,里面包含一个main方法,main方法中使用SpringApplication.run(Application.class, args)方法来启动应用。这个入口类一定要在类上加上一个注解:@SpringBootApplication,这个注解是一个组合注解,都是由哪些注解组合的请大家去看源码了没什么可介绍的。

@SpringBootApplication
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

}

    springboot支持两种配置文件:properties和yml,官方推荐使用yml(我个人习惯了properties),默认配置文件存放在src/mian/resources目录下,名称为:application.properties或application.yml

    这两个配置文件中能配置很多内容,包括springboot自己的和集成第三方时候的一些配置,但是这些配置全部都是有默认值的,只有需要修改的时候才需要去配置。现在就举几个大家可能会经常用到的

    a、springboot自带web容器的默认端口是8080,如果想修改只需要在上述配置文件中加入server.port=8081;

    b、项目根目录,springboot自带的容器启动后是默认不带项目名的,如果你想带上项目名那添加

         server.context-path=/taskCenter

    以上是在properties中的写法,在yml中应该是

server:
      port:8081
      contextPath:/taskCenter

    starter pom

    这里介绍下springboot最强大的功能,提供大部分企业开发绝大多数场景的starter pom ,也就是集成并默认配置好的第三方组件包,引入starter pom后,springboot就会自动使用默认配置帮我们配置好。

    官方提供了有好几十种,有的开源项目为了支持springboot也提供了starter pom ,详细的内容请移步Starter POMs详解,有详细介绍。      

2、日志配置

    springboot 支持logging、Log4j,Log4j2和Logback作为日志框架,默认使用的是Logback

    logging.file=d:/mylog/log.log

    logging.level.org.springframework.web=DEBUG

3、profile配置

    profile是针对不同环境对不同配置提供支持的,全局的Profile配置使用application-{profile}.properties

    通过在application.properties中设置spring.profiles.active=prod来指定活动的Profile。

4、运行原理

    关于运行原理我们还是从@SpringBootApplication注解开始说起,他是一个组合注解,到底组合了哪些呢?我们看下源码:(如果你用的老版本那源码可能不一样,旧的是使用import注解引入了一个EnableAutoConfigurationImportSelector.class的实现类进行自动配置的,新版本多了一个@EnableAutoConfiguration这个注解,其实@EnableAutoConfiguration注解中实现和旧版本一样也是用的import)

大家可以看到有一个@EnableAutoConfiguration注解,这个就是SpringBoot最强大的注解没有之一,是他帮我们完成了集成的所有默认配置。到底都支持哪些默认配置呢?

进入源码后我们可以看到源码所在的包是:spring-boot-autoconfigure-1.5.6.RELEASE.jar(版本号根据你实际使用的版本决定),这个包中定义了springboot官方支持的所有自动配置的源代码。展开看下就大概知道springboot可以帮我们自动配置哪些东西了。

就这么多,够用了吧,相信你大家进行web开发的时候常用的框架都在这里了,所以springboot就牛逼在这里,很多以前需要写很多配置文件才能搞定的,现在只需要引入包,修改几行配置就可以集成一个框架。是不是很牛逼啊。(关于注解如果大家不熟的话,请恶补下)

有了@EnableAutoConfiguration这个牛逼的注解,接下来我们看下springboot到底怎么实现自动配置的?

1、springboot怎么知道什么时候需要自动配置什么内容呢?其实就是我们在引入了什么样的starter,每引入一个starter,springboot会自动扫描到,然后引入默认配置。

2、从spring4.x引入了强大的条件注解,才有springboot的自动配置,springboot是利用条件注解判断什么时候选择注解中的什么内容。

    条件注解位于org.springframework.boot.autoconfigure.condition这个包下,具体每个注解的含义就不多做介绍了,大家可以去官方看下。

3、很多时候我们都需要修改默认配置,这个默认配置包括最简单的默认参数(前面已经讲过了)和java 配置。当我们需要改变默认配置的逻辑或是加载一些额外的内容,那么就需要我们进行单独的配置。springboot提倡java config,所以在我们的springboot工程里面一般都会有单独的一个目录专门用于修改默认配置或是新增默认配置。

大概流程就是这样了,接下来我们梳理下

    springboot通过@SpringApplication注解启动,启动后通过@EnableAutoConfiguration注解和我们引入到工程中的start进行识别(利用了条件注解),识别出哪些内容需要完成自动配置,配置完成以后启动spring容器。如果你想看看springboot给我们默认配置了哪些内容,你可以在启动的时候加上-debug参数,控制台中就会出现#Atuo Configure  下方的内容就是默认配置项。

   好了,运行的原理(准备期的说应该是流程,并不是什么理论概念)就介绍到这里,下一篇我们就重点讲下springboot中怎么使用spring、spring mvc、serlvlet、fillter这些web开发的内容。