初识SpringBoot——SpringBoot原理浅析

现象

我们都知道,通过IDEA生成一个SpringBoot项目之后,运行包根路径下的XXXApplication类就能启动项目,并且通过localhost:8080端口就能访问我们的应用,不需要任何额外的配置!这相对于一个Spring项目,即使一个简单的功能都需要“大量”的配置来说,简直方便极了!

问题

那么问题来了,SpringBoot到底为我们做了哪些事情?

分析

首先我们生成一个SpringBoot项目,包下面会自动多了这样一个类:

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

这个类乍一看和一般的类没什么区别,除了头上多了个@SpringBootApplication注解,而关键就在于这个注解上,接下来我们看看这个注解为我们做了什么。

进入这个注解,我们看到:(这里我去除了一些不重要的代码,方便观看)

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan()
public @interface SpringBootApplication {}

@SpringBootApplication注解上有三个比较耀眼的注解,我们逐一看看这三个注解都做了什么:

  1. @SpringBootConfiguration
@Configuration
public @interface SpringBootConfiguration {}

这个注解实际的作用就是标明我们的启动类作为一个配置类

  1. @EnableAutoConfiguration
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {}

这个注解就比较重要了,看名字就是让SpringBoot自动为我们配置,那到底配置了什么呢,这个注解头上又有两个注解:

2.1 @AutoConfigurationPackage

@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {}

我们看到这个注解为我们导入了一个类,我们进入这个类,并在139行打上断点,然后Debug启动项目:
在这里插入图片描述
这个类的作用就是,将启动类所在的包下的所有的类加入到Spring进行管理,如果我们将类定义在启动类所在的包之外,那么Spring容器是不能为我们管理这个类的(可以自行尝试)。

2.2 @Import(AutoConfigurationImportSelector.class) 这第二个注解又为我们导入了一个类AutoConfigurationImportSelector,我们进入这个类,并在443行打上断点,debug一下

在这里插入图片描述
我们会发现这个类会为我们导入很多xxxAutoConfiguration类,这些类就是SpringBoot为我们默认导入一些常用组件用的,如AOP、Jackson等,还有我们最熟悉的DispatcherServlet。

  1. ComponentScan这个注解就不多说了,就是进行一些组件的扫描。

以上就是对SpringBoot的一个初步分析。

猜你喜欢

转载自blog.csdn.net/chenshufeng115/article/details/108353029