SpringBoot使用时会发现,很多之前SpringMVC的配置都不需要配置我们可以直接拿来使用了,所有的配置一个都没配,甚至tomcat的端口都没有。这些配置都去哪儿了呢?为什么什么都不配就可以使用呢?
其魔力所在就在SpringBoot的启动类上。启动类中一共有两个东西,一个SpringBootApplication注解,一个run方法。
先看SpringBootApplication:
点进去除了元注解的东西外,有三个特殊的注解,一个SpringBootConfiguration。
在SpringBootConfiguration中,只有一个configuration注解,也就是说这个注解其实就是一个配置注解。表明当前类提供了Springboot的配置,作用和configuration是一样的,只不过SpringBootConfiguration的意思说明它是一个SpringBoot的配置。
同样,因为里面包含了configuration注解,启动类也可以看作是一个配置类,也可以在启动类中 直接用bean注解了。
第二个注解是EnableAutoConfiguration。
源码:启用自动配置,猜测你可能会如何去配置。
如何去猜?
举个例子:比如添加了tomcat的jar包,就证明你可能要添加tomcat的配置。就是说引入什么依赖,他就认为你想要玩什么。同样,如果引了mybatis,就会自动配mybatis。会监测classpath的依赖。
第三个注解:ComponentScan。翻译:组件扫描。如果SpringBoot的启动类不写在包里面,则在启动时会报错:Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package错误。就是因为这个注解默认指扫描当前启动类所在的包里的对象。
在以前SpringMVC配置文件中,都需要配一个controller自动扫描包。
但是SpringBoot不但不用配置,并且路径已经被映射进来了。这个注解就是用来配置组件扫描命令的。
意思就是使用这个注解代替xml中的扫描标签,通过注解中的属性来指定要扫描的包,从声明这个注解所在的类开始扫描。
总结:SpringBootApplication一共做三件事儿:
1.声明是个配置类
2.开启自动配置
3.扫描包。
以前配扫描包SpringMVC需要配,后来还要配Spring。这种配法本身就存在问题,是扫两个,有重复。SpringMVC扫web包,这些包是加入到SpringMVC的容器里面了。Spring扫所有IOC下的包。即便是他两各扫各的,也会出现各种莫名其妙的问题,不好解决。SpringBoot统一用一个容器来扫。