SpringBoot工作机制之@SpringBootApplication

@SpringBootApplication

使用IDEA快速构建一个SpringBoot项目,使用的SpringBoot版本为2.1.6.RELEASE

@SpringBootApplication是一个复合的注解,但实际上对于SpringBoot应用来说,重要的只有三个

@Configuration

@EnableAutoConfiguration

@ComponentScan

所以如果我们使用如下的SpringBoot启动类,整个SpringBoot应用依然可以与之前的启动类功能对等。

@Configuration

这里的@Configuration,它就是Spring IoC容器的配置类使用的那个@Configuration,既然SpringBoot应用骨子里就是一个Spring引用,自然也需要加载某个IoC容器的配置,这里启动类标注了@Configuration之后,本身其实也是一个IoC容器的配置类!很多SpringBoot的代码示例都喜欢在启动类上直接标注@Configuration或者@SpringBootApplication,对于初接触SpringBoot的开发者来说,其实这种做法不便于理解,如果我们将上面的SpringBoot启动类拆分为两个独立的Java类,整个形式就明朗了:

public class DemoApplication {

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

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class DemoConfiguration(){
    @Bean
    public Controller controller(){
        return new Controller();
    }
}

所以,启动类DemoApplication就是一个标准的main函数启动类,而@Configuration标注的DemoConfiguration定义其实也是一个普通的JavaConfig形式的IoC容器配置类,全是Spring框架的概念。

@EnableAutoConfiguration

@EnableAutoConfiguration类似于Spring框架中的提供的各种以@Enable的注解,比如@EnableScheduling、@EnableMBeanExport等,都是借助@Import的支持,收集和注册特定场景相关的bean定义:

  • @EnableScheduling是通过@Import将Spring调度框架相关的bean定义都加载到IoC容器。

  • @EnableMBeanExport是通过@Import将JMX相关的bean定义加载到IoC容器。

而@EnableAutoConfiguration也是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器。

最关键的是@Import(AutoConfigurationImportSelector.class),借助AutoConfigurationImportSelector,@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。那么,AutoConfigurationImportSelector又是如何加载的呢?

查看AutoConfigurationImportSelector类的源码,它依赖于SpringFactoriesLoader的loadFactoryNames方法,来获取一组自动配置类名。

自动配置的幕后英雄:SpringFactoriesLoader

它的主要功能就是从指定的配置文件META-INF/spring.factories加载配置,配置的格式为Key = Value形式,只不过key和value都是Java类型的完整类名,比如:

example.MyServer=example.MyServerImpl1,example.MyServerImpl2

然后框架就可以根据某个类型作为Key来查询对应的类型名称列表了,对于AutoConfigurationImportSelector来说,即根据@EnableAutoConfiguration的完整类名org.springframework.boot.autoconfigure.EnableAutoConfiguration作为查找的Key,获取对应一组@Configuration类:

以上是从SpringBoot的autoconfigure依赖包中的META-INF/spring.factories配置文件中截取的一部分内容,可以很好的说明问题。

所以,@EnableAutoConfiguration自动配置就是从classpath中搜索所有META-INF/spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的配置项通过反射实例化对应的@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器。

@ComponentScan

@ComponentScan对应XML配置形式中的<context:component-scan>元素,用于配合@Component和@Repository等注解,将标注了这些注解的bean定义类批量采集到Spring的IoC容器中。

我们可以通过basePackages等属性来细粒度地定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。

参考资料《SpringBoot揭秘 快速构建微服务体系》

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 1、基于SpringBoot+Vue开发的前后端分离外卖点单系统源码+数据库+项目说明.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于SpringBoot+Vue开发的前后端分离外卖点单系统源码+数据库+项目说明.zip 基于SpringBoot+Vue开发的前后端分离外卖点单系统源码+数据库+项目说明.zip ## 目录结构 后台前端项目位于renren-ui下 小程序前端项目位于takeout_mp下 SQL文件位于根目录下的takeout_mysql8.sql,需要MYSQL8以上版本。 **ps:请先运行后端项目,再启动前端项目。** ``` take_out │ ├─renren-admin 美食元素后台管理后端服务 │ │ │ │ │ ├─modules 模块 │ │ ├─job 定时任务 │ │ ├─log 日志管理 │ │ ├─oss 文件存储 │ │ ├─security 安全模块 │ │ ├─sys 系统管理(核心) | | └─takeout 外卖业务模块(核心) │ │ │ └─resources │ ├─mapper MyBatis文件 │ ├─public 静态资源 │ └─application.yml 全局配置文件 │ │ ├─renren-api 美食元素小程序后端服务 │ ├─renren-common 公共模块 ├─renren-generator 代码生成器 │ └─resources │ ├─mapper MyBatis文件 │ ├─template 代码生成器模板(可增加或修改相应模板) │ ├─application.yml 全局配置文件 │ └─generator.properties 代码生成器,配置文件 │ ├─renren-ui 美食元素后台管理Vue前端项目 ├─takeout_mp uniapp微信小程序项目 ``` ## 项目特点 - 友好的代码结构及注释,便于阅读及二次开发 - 实现前后端分离,通过token进行数据交互 - 支持动态权限修改,采用RBAC模型,前端菜单和后台权限实时更新。 - 提供CrudService接口,对增删改查进行封装,代码更简洁 - 页面交互使用Vue2.x,极大的提高了开发效率 - 完善的部门管理及数据权限,通过注解实现数据权限的控制 - 完善的XSS防范及脚本过滤,彻底杜绝XSS攻击 - 完善的代码生成机制,可在线生成entity、xml、dao、service、vue、sql代码,减少70%以上的开发任务 - 引入quartz定时任务,可动态完成任务的添加、修改、删除、暂停、恢复及日志查看等功能 - 引入Hibernate Validator校验框架,轻松实现后端校验 - 引入云存储服务,已支持:七牛云、阿里云、腾讯云等 - 引入swagger文档支持,方便编写API接口文档 - 新增AOP注解实现日志管理。 - 代码遵循阿里巴巴开发规范,利于开发者学习。 ## 技术选型 - 核心框架:Spring Boot 2.7.1 - 安全框架:Apache Shiro 1.9 - 持久层框架:MyBatis 3.5 - 定时器:Quartz 2.3 - 数据库连接池:Druid 1.2 - 日志管理:Logback - 页面交互:Vue2.x - 微信小程序:uni-app ## 开发环境 | 开发工具 | 说明 | | ----------------------------- | ------------------ | | IDEA | Java开发工具IDE | | WebStrom或者VS Code | Vue开发工具IDE | | Navicat | MySQL远程连接工具 | | Another Redis Desktop Manager | R

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值