Spring Boot自动配置原理

1.@SpringBootApplication注解

springboot是基于spring的新型的轻量级框架,最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置

java 复制代码
@SpringBootApplication//标注在某个类上,表示这个类是Spring Boot的启动类
@MapperScan("com.zhy.mapper")// @MapperScan 用户扫描MyBatis的Mapper接口
public class Springboot_MyBatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(Springboot_MyBatisApplication.class,args);
    }
}

从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开SpringBoot的神秘面纱,我们要从这两位开始就可以了。

java 复制代码
@SpringBootConfiguration//表示当前类是一个IoC容器的配置类
@EnableAutoConfiguration //开启SpringBoot自动装配功能
@ComponentScan(excludeFilters = {// 扫描路径设置
    @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
	@Filter(type = FilterType.CUSTOM, classes =AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
...
}

2.@SpringBootConfiguration注解

包括了@Configuration,配合@Bean代替xml配置文件的形式注入bean:

a)xml配置文件的形式注入bean

XML 复制代码
<bean id="mockService" class="..MockServiceImpl">
...
</bean>

b)注解配置形式注入bean

java 复制代码
@Configuration
public class MockConfiguration{
    /*
     *任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该 
     *bean定义的id。
     */
    @Bean
    public MockService mockService(){
        return new MockServiceImpl();
    }
}

3.@EnableAutoConfiguration注解

@EnableAutoConfiguration:开启SpringBoot自动装配功能

java 复制代码
@AutoConfigurationPackage//将标注@SpringBootApplication的类所在包及子包里所有组件扫描到IOC容器
@Import(EnableAutoConfigurationImportSelector.class)//借助@Import将配置类注入到IOC容器
public @interface EnableAutoConfiguration {
...
}

3.1.@AutoConfigurationPackage注解

java 复制代码
@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {

}

AutoConfigurationPackages.Registrar.class将启动类(@SpringBootApplication标注的类)的所在包及子包里面所有组件扫描到Spring容器;

3.2.@Import注解

EnableAutoConfigurationImportSelector读取META-INF/spring.factories的值,将这些值作为配置类加载到IOC容器中,帮助我们进行自动配置工作

4.@ComponentScan

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

5. 总结:

SpringBootApplication

@SpringBootConfiguration:标识启动类是一个IOC容器的配置类

@EnableAutoConfiguration:

@AutoConfigurationPackage:扫描启动类所在包及子包中所有的组件,生成实体bean并交给IOC容器管理

@Import({AutoConfigurationImportSelector.class}):会加载META-INF/spring.factories文件,并调用该文件中的自动配置类完成自动配置工作,

所以我们只需再application.yml中提供mysql的url、用户名、密码等信息即可完成mybatis的自动配置

@ComponentScan:配置springboot要扫描的包

相关推荐
是梦终空3 分钟前
JAVA毕业设计259—基于Java+Springboot+vue3工单管理系统的设计与实现(源代码+数据库+开题报告)
java·spring boot·vue·毕业设计·课程设计·工单管理系统·源代码
用户2190326527356 分钟前
Spring Boot 集成 Redis 实现看门狗 Lua 脚本分布式锁
java·后端
zybsjn9 分钟前
ShardingSphere 启动报错 “Unknown table ‘keywords‘ in information_schema“ 完整解决方案
java
月明长歌15 分钟前
【码道初阶】【LeetCode 102】二叉树层序遍历:如何利用队列实现“一层一层切蛋糕”?
java·数据结构·算法·leetcode·职场和发展·队列
codingPower17 分钟前
制作ftl文件通过FreeMarke生成PDF文件(含图片处理)
java·开发语言·pdf
R.lin19 分钟前
Spring AI Alibaba 1.1 正式发布!
java·后端·spring
程序员阿明30 分钟前
spring security 6的知识点总结
java·后端·spring
李子园的李1 小时前
Java函数式接口——渐进式学习
java
running up1 小时前
Spring Bean生命周期- BeanDefinition 加载与 BeanFactoryPostProcessor BeanPostProcessor
java·后端·spring
222you1 小时前
Java线程的三种创建方式
java·开发语言