Spring Boot 学习之——@SpringBootApplication注解(自动注解原理)

@SpringBootApplication注解

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

@SpringBootApplication//标注在某个类上,表示这个类是SpringBoot的启动类
public class Application {
   
    public static void main(String[] args) {
   
        SpringApplication.run(Application.class, args);
    }
}

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

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

1.@SpringBootConfiguration注解

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

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

<bean id="mockService" class="..MockServiceImpl">
...
</bean>

b)注解配置形式注入bean

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

2.@EnableAutoConfiguration注解

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

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

2.1.@AutoConfigurationPackage注解

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

}

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.2.@Import注解

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

3.@ComponentScan

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

相关推荐

  1. @SpringBootApplication 注解

    2024-01-21 05:48:04       27 阅读
  2. SpringBoot@RequestParam注解

    2024-01-21 05:48:04       49 阅读
  3. @SpringBootApplication 注解(版本2.7.10)

    2024-01-21 05:48:04       58 阅读
  4. @SpringBootApplication 注解及源码 详解

    2024-01-21 05:48:04       23 阅读
  5. springboot自动配置的条件注解使用

    2024-01-21 05:48:04       53 阅读
  6. SpringBoot注解

    2024-01-21 05:48:04       69 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-21 05:48:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-21 05:48:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-21 05:48:04       82 阅读
  4. Python语言-面向对象

    2024-01-21 05:48:04       91 阅读

热门阅读

  1. clickhouse 单副本和双副本升级差别

    2024-01-21 05:48:04       48 阅读
  2. 12.线程同步

    2024-01-21 05:48:04       35 阅读
  3. 每日算法打卡:连号区间数 day 18

    2024-01-21 05:48:04       57 阅读
  4. K8s面试题——基础篇2

    2024-01-21 05:48:04       46 阅读
  5. golang二分查找算法实现

    2024-01-21 05:48:04       53 阅读
  6. vue3中的nexttick

    2024-01-21 05:48:04       59 阅读
  7. logstack 日志技术栈-03-日志最佳实践

    2024-01-21 05:48:04       46 阅读
  8. 《微信小程序开发从入门到实战》学习八十七

    2024-01-21 05:48:04       59 阅读