springboot的引导类启动分析

143 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 ​

目录

一、启动

1、有服务,没有默认主页

2、没有服务

二、源码分析

1、@SpringBootApplication 注解源码

 2、源码1:command + @SpringBootApplication 可查看

3、源码2:command + @SpringBootConfiguration可查看

三、其他

1、关于包的扫描

2、springboot的强大之处


一、启动

1、有服务,没有默认主页

表示服务已经启动,只是没有显示欢迎页面或Rrror错误页面

2、没有服务

二、源码分析

1、@SpringBootApplication 注解源码

如下可见:spring图标,内置tomact服务

 2、源码1:command + @SpringBootApplication 可查看

@Target({ElementType.TYPE})//能出现的位置
@Retention(RetentionPolicy.RUNTIME)//改变注解的生命周期
@Documented//被注解类,生成doc的时候,继承文档
@Inherited//被注解类,继承父类的注解。以上四个是jdk提供的原注解
@SpringBootConfiguration//声明为配置类
@EnableAutoConfiguration//启用自动配置,写了就启用,不写就不启用
@ComponentScan(//自动扫描包
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
}

3、源码2:command + @SpringBootConfiguration可查看

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration//基于注解ioc配置,表明当前类为配置类
public @interface SpringBootConfiguration {
    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}

三、其他

1、关于包的扫描

通过以上源码分析,我们知道:

DemoApplication就相当于springboot的一个配置类,并且提供自动扫描包的功能。

它能扫描哪些包?

当前包以及子包。

如:我们当前包为 package com.yyh.demo;

com.yyh.demo 【能扫描】

com.yyh.demo.a【能扫描】

com.yyh.demo.a.b【能扫描】

com.yyh【不能扫描】

2、springboot的强大之处

它并不是简化了我们原来之前的配置,

而是springboot把我们之前的配置给封装了起来

用一个注解,解决了我们几个注解,甚至加上配置文件,才能解决的问题。

这个就是springboot的强大之处,它使我们的注解配置、xml配置,进行进一步的简化

不仅让我们的编码更轻量级,也使我们的配置更轻量级

image.png