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

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主入口类上,因此组件扫描默认扫描的包是主入口程序所在的包以及该包下的所有子包。

相关文章:

  • PXE安装Ubuntu系统
  • 2025数维杯挑战赛A题【空中芭蕾——蹦床运动的力学行为分析】原创论文分享
  • 初探机器学习与深度学习
  • 嵌入式机器学习平台Edge Impulse图像分类 – 快速入门
  • 利用“Flower”实现联邦机器学习的实战指南
  • vector的大小
  • redis数据结构-05 (LPUSH、RPUSH、LPOP、RPOP)
  • 【今日三题】素数回文(模拟) / 活动安排(区间贪心) / 合唱团(动态规划)
  • 特励达力科LeCroy推出Xena Freya Z800 800GE高性能的800G以太网测试平台
  • 【英语笔记(一)】概述词类的作用与语义:名词、代词、数词、代词、动词.....,副词、不定式、分词、形容词等语义在句子中的作用;讲解表语、定语等
  • Linux网络基础 -- 局域网,广域网,网络协议,网络传输的基本流程,端口号,网络字节序
  • python打卡day22@浙大疏锦行
  • Java SE(11)——内部类
  • 无锁秒杀系统设计:基于Java的高效实现
  • VMware安装CentOS Stream10
  • Three.js + React 实战系列 - 联系方式提交表单区域 Contact 组件✨(表单绑定 + 表单验证)
  • Yocto 项目中的 glibc 编译失败全解析:原因、原理与修复策略
  • 深入剖析 MyBatis 位运算查询:从原理到最佳实践
  • RabbitMQ的工作队列模式和路由模式有什么区别?
  • BGP联盟
  • 俄官员说将适时宣布与乌克兰谈判代表
  • 从“求生”到“生活”:医保纳入创新药让梗阻性肥厚型心肌病患者重拾生活掌控权
  • 加强战略矿产出口全链条管控工作部署会召开
  • 印度证实印巴已同意停火
  • 印度军方否认S-400防空系统被摧毁
  • 花2万多在海底捞办婚礼,连锁餐企要抢酒楼的婚宴生意?