当前位置: 首页 > java >正文

SpringBoot主入口类分析

1 )SpringBoot主入口类

SpringBoot 主入口类如下所示,这个类的main方法就是整个springboot项目的入口。 

package com.example.demo3;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Demo3Application {public static void main(String[] args) {SpringApplication.run(Demo3Application.class, args);}}

2 )@SpringBootApplication注解

 SpringBootApplication注解的源码如下所示。

 通过如上注解可以看出,其 @SpringBootApplication注解包含着以下三个注解。

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class}
)}
)

其余的都是JDK内置的原注解,也就是说 @SpringBootApplication 是一个复合注解,同时拥有以上三个注解的功能。

 3)@SpringBootConfiguration注解

 @SpringBootConfiguration本身又是一个组合注解,其内容如下:

所以看出来,其是@SpringBootConfiguration本身包含着@Configuration注解,而只要被@Configuration标注的类,其都是配置类,所以可以得出的结论是:@Configuration实际标注着SpringBoot 的主入口类,所以入口类本身也是一个配置类

测试入口类是一个配置类:

package com.example.demo3.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;@RestController
public class UserController {@Autowiredprivate Date date;@GetMapping("/hello")public String Hello(){return date.toString();}}

 可以看出,其确实Date的类型确实被纳入到了IOC容器。

4 )@EnableAutoConfiguration

EnableAutoConfiguration它是一个启用自动配置的注解。也就是说,在默认情况下,springboot应用都会默认启动自动配置。自动配置是什么?

所谓的自动配置,就是springboot应用会去类路径当中查找class,根据类路径当中有某个类,或某些类来自动管理Bean,不需要我们自己手动配置。

举例:

springboot检测到类路径当中有SqlSessionFactory,或者application.properties文件中配置了数据,那么springboot会认为项目中有mybatis框架,因此会将mybatis中相关的bean自动的初始化,然后放到IOC容器当中,自动的将这些bean管理起来。

 public static void main(String[] args) {
//        SpringApplication.run(Demo3Application.class, args);ConfigurableApplicationContext applicationContext =  SpringApplication.run(Demo3Application.class, args);
}

其中SpringApplication.run(Demo3Application.class, args);是有返回值的,其返回值中就可以获取到Spring的上下文对象的。其run方法返回值就是spring容器。

可以发现,其确实自动的被注入了 

5)@ComponentScan

ComponentScan注解是一个负责组件扫描的注解,这个注解出现在springboot主入口类上,因此组件扫描默认扫描的包是主入口程序所在的包以及该包下的所有子包。

http://www.xdnf.cn/news/5359.html

相关文章:

  • 虚幻引擎5-Unreal Engine笔记之UE编辑器退出时的保存弹框
  • 【QT】UDP通讯本地调试
  • Pandas 时间处理利器:to_datetime() 与 Timestamp() 深度解析
  • 趣味编程:四叶草
  • Python赋能自动驾驶:如何打造高效的环境感知系统
  • 嵌入式硬件篇---TOF|PID
  • 微软向现实低头:悄悄延长Windows 10的Microsoft 365支持
  • 每日c/c++题 备战蓝桥杯(P1002 [NOIP 2002 普及组] 过河卒)
  • 数据仓库Hive
  • 【即插即用涨点模块】RFAConv感受野注意力卷积:突破卷积参数共享瓶颈,感受野注意力重塑空间特征提取【附源码】
  • 深度剖析多模态大模型中的视频编码器算法
  • 高级数据结构:线段树
  • 《Redis应用实例》学习笔记,第一章:缓存文本数据
  • HVV蓝队初级面试总结
  • 【动态规划】斐波那契数列模型
  • Go语言从零构建SQL数据库(9)-数据库优化器的双剑客
  • Gin 框架入门
  • Java学习笔记(对象)
  • 游戏引擎学习第272天:显式移动转换
  • app加固
  • Vue.js 页面切换空白与刷新 404 问题深度解析
  • 《智能网联汽车 自动驾驶功能道路试验方法及要求》 GB/T 44719-2024——解读
  • 视频编解码学习三之显示器续
  • 鸿蒙跨平台开发教程之Uniapp布局基础
  • LWIP的ICMP协议
  • 小刚说C语言刷题—1058 - 求出100至999范围内的所有水仙花数
  • 每日算法刷题 Day3 5.11:leetcode数组2道题,用时1h(有点慢)
  • UE5定序器中摇臂挂载摄像机 让摄像机始终朝向目标
  • CDGP数据治理主观题评分标准与得分策略
  • 杆件的拉伸与压缩变形