Springboot配置

分析springboot的启动类:研究下 @SpringBootApplication 注解

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

@SpringBootApplication 源码: 红框中的是重点注解

 

1.@SpringBootConfiguration

在这个注解上面,又有一个@Configuration注解
这个注解的作用就是声明当前类是一个配置类
然后Spring会自动扫描到添加了@Configuration的类
读取其中的配置信息
而@SpringBootConfiguration是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。所以一般我们无需自己添加。

2.@EnableAutoConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
    Class<?>[] exclude() default {};
    String[] excludeName() default {};
}

开启自动配置
告诉SpringBoot基于所添加的依赖,去“猜测”你想要如何配置Spring。
比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖
此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!
SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置
这些配置是否生效,取决于我们是否引入了对应库所需的依赖
如果有那么默认配置就会生效
我们使用SpringBoot构建一个项目,只需要引入所需框架的依赖,配置就可以交给SpringBoot处理了

 3.@ComponentScan

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {

...
}

配置组件扫描的指令
提供了类似与<context:component-scan>标签的作用
通过basePackageClasses或者basePackages属性来指定要扫描的包。
如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包
而我们的@SpringBootApplication注解声明的类就是main函数所在的启动类,
因此扫描的包是该类所在包及其子包。因此,一般启动类会放在一个比较前的包目录中。

 

posted @ 2020-12-22 17:24  wangid3  阅读(58)  评论(0)    收藏  举报