SpringBoot底层注解超详细介绍

目录

1. @Configuration

2. @bean

3. @Import

4. @Conditional条件装配

5. 配置绑定

SpringBoot自动配置原理(源码分析)

1. @Configuration

—— 放在类前注释 用于表示配置类,配置类也是一个组件

@Configuration(proxyBeanMethods = true) // 配置类 == 配置文件 public class MyConfig { }

通过 proxyBeanMethods 很好的解决了组件依赖的问题 ——

只是注册组件,组件间无依赖(false)

有组件依赖(true)

测试组件依赖及测试类本身是组件

// 配置类本身也是一个组件 MyConfig bean = run.getBean(MyConfig.class); System.out.println(bean); run.getBean("user01", User.class); run.getBean("tom", Pet.class); System.out.println("用户的宠物是不是容器中的宠物" + (user01.getPet() == tom01)); 2. @bean

—— 放在方法前表示给容器中注册组件 (单实例)

注:目前我对容器、组件的理解有限, 后期如果有更深入的理解,会更新此处

@Bean // 给容器中添加组件,方法名作为组件id, 返回类型是组件类型 , 返回的值是组件在容器中的实例 public User user01(){ User zangsan = new User("zangsan", 18); zangsan.setPet(tomcatPet()); return zangsan; }

测试是否注册成功

ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); // 查看容器里的组件 String[] names = run.getBeanDefinitionNames(); for(String s: names){ System.out.println(s); } 3. @Import

—— 放在配置类前,用于导入组件

@Import({User.class, DBHelper.class}) // 给容器中自动创建出这两个类型的组件 @Configuration // 配置类 == 配置文件 public class MyConfig { }

测试导入组件是否成功

DBHelper bean1 = run.getBean(DBHelper.class); 4. @Conditional条件装配

—— 用于注册组件需要特定条件的情况

例如: 用户需要宠物,若无宠物tom组件,不能注册用户组件

@ConditionalOnBean(name = "tom") // 表示有 tom 组件才能注册 user01 组件 @Bean // 给容器中添加组件,方法名作为组件id, 返回类型是组件类型 , 返回的值是组件在容器中的实例 public User user01(){ User zangsan = new User("zangsan", 18); zangsan.setPet(tomcatPet()); return zangsan; }

测试

System.out.println("容器中是否含有宠物组件" + run.containsBean("tom")); System.out.println("容器中是否含有用户组件" + run.containsBean("user01")); 5. 配置绑定

绑定核心配置文件 (application.properities)

方法一:

@Component // 将组件加到容器中 @ConfigurationProperties(prefix = "mycar") // 配置属性名

方法二:

// 功能一:开启Car的属性配置 // 功能二:把指定的组件导入容器中 @EnableConfigurationProperties(Car.class)

测试类:

@Autowired Car car; @RequestMapping("/car") public Car car(){ System.out.println(car); return car; } SpringBoot自动配置原理(源码分析) @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration // 当前是一个配置类 @EnableAutoConfiguration @ComponentScan( // 指定扫描那些Spring注解 excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} )

@EnableAutoConfiguration

@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage //——@Import({AutoConfigurationPackages.Registrar.class}) @Import({AutoConfigurationImportSelector.class})

核心注解1:

@AutoConfigurationPackage 利用Registrar给容器中批量注册组件

—— 将指定包下的组件批量导入 (MainAppliaction 包下)

核心注解2

@Import({AutoConfigurationImportSelector.class})

—— 利用 getAutoConfigurationEntry() 方法给容器中批量导入组件

配置类位置

总结: SpringBoot 所有自动配置全部加载, 按照条件装配 —— 导入相关场景才能生效

springboot 加载所有自动配置类, 按条件生效 —— 生效的配置类为容器中装配组件(默认绑定配置文件中的值)

用户有自己配置的组件, 以用户的为先

定制化配置 —— 自己替换底层组件 / 修改底层组件配置文件中的值

到此这篇关于SpringBoot底层注解超详细介绍的文章就介绍到这了,更多相关SpringBoot底层注解内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    学习写字楼新选择6000元主流配置

    学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办公和娱乐平台,充分考虑办公室的办公需求和娱乐需求,以约6000元的预算和cost-e

    酷睿I7 配置

    酷睿I7 配置,配置,玩家国度啦华硕 Rampage II Extreme(3800元)如果米不够,也可以把Extreme改为Gene,不过是小板内存推荐金士顿6G DDR3 2000骇

    提高3A四核羿龙II游戏配置的性能

    提高3A四核羿龙II游戏配置的性能,,以节能环保为主题的IT产业,目前3A低端平台处理器、主板芯片组、独立开发卡性能突出,特别是在与AMD的处理

    opporeno8参数配置及价格

    opporeno8参数配置及价格,面部,亿元,Oppo的荣誉2020年1月4日,接近屏幕关闭传感器是否支持双卡:支持oppor11splus什么时候上市的Oppo R11S P

    查看配置:酷睿i3530集展示办公平台

    查看配置:酷睿i3530集展示办公平台,,由于时间和精力的关系,我们不可能对所有的配置进行评论,希望我们能理解,我希望我们的评论能在那些需要帮

    3500元超额值学生娱乐结构的优化配置

    3500元超额值学生娱乐结构的优化配置,,作为一个DIY的主流用户领域的学生,每个用户51学生攒机的高峰。因为学生用户没有稳定的收入来源,攒机

    电脑配置快捷键|查看电脑配置快捷键

    电脑配置快捷键|查看电脑配置快捷键,,查看电脑配置快捷键1.在win10中,快捷键组合win+E已经变成了“快速访问”,不再是以前的“我的电脑了”2

    6000元教你黑盒5000+权限配置

    6000元教你黑盒5000+权限配置,,一系列的价格后,最经典的AMD双核处理器mdash;mdash;Athlon 64 X2 5000 +黑版mdash;mdash;目前的价格已经低至565