profile注解定义为

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(ProfileCondition.class)
public @interface Profile {/*** The set of profiles for which the annotated component should be registered.*/String[] value();}

通过定义知道其依赖条件ProfileCondition,而ProfileCondition定义为

class ProfileCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {MultiValueMap<String, Object> attrs = metadata.getAllAnnotationAttributes(Profile.class.getName());if (attrs != null) {for (Object value : attrs.get("value")) {if (context.getEnvironment().acceptsProfiles((String[]) value)) {return true;}}return false;}return true;}}

profile注解是如何解析到的呢?以AnnotationConfigApplicationContext为例,其首先扫描,得到包含@Compoent注解及派生的bean,然后匹配条件

protected boolean isCandidateComponent(MetadataReader metadataReader) throws IOException {for (TypeFilter tf : this.excludeFilters) {if (tf.match(metadataReader, getMetadataReaderFactory())) {return false;}}for (TypeFilter tf : this.includeFilters) {if (tf.match(metadataReader, getMetadataReaderFactory())) {return isConditionMatch(metadataReader);}}return false;}private boolean isConditionMatch(MetadataReader metadataReader) {if (this.conditionEvaluator == null) {this.conditionEvaluator =new ConditionEvaluator(getRegistry(), this.environment, this.resourcePatternResolver);}return !this.conditionEvaluator.shouldSkip(metadataReader.getAnnotationMetadata());}

spring中是如何解析@Profile注解的相关推荐

  1. java为什么引入注解_说说Spring中为何要引入Lookup注解

    前言 我们先探一探官方文档关于Method Injection的章节是怎么说的: In most application scenarios, most beans in the container ...

  2. Spring中解决事务以及异步注解失效

    Spring中解决事务以及异步注解失效 一.重现@Transaction失效的场景 有如下业务场景,新增订单后,自动发送短信,下面的代码在同一个类中: @Transaction public void ...

  3. Spring 中 @Component、@Service 等注解如何被解析?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://8rr.co/EjqL 前言 @ ...

  4. spring中的Enviroment和profile到底怎么用

    前言 在我刚入行不久时,总是对上下文(Context).环境(Environment)这类抽象概念搞不清楚.弄不明白.玩不转,更是不懂它哥俩的区别或者说是联系(说实话从中文上来说不好区分,至少我是这么 ...

  5. spring中基于Java容器配置注解的区别及使用场景

    转载自百家号作者:有趣的代码 @Component.@Service.@Controller.@Repository:@Configuration.@Bean区别,使用场景 从spring3.0开始, ...

  6. Spring中经常用到的注解提交方式@Postmapping、@GetMapping、@PutMapping、DeleteMapping

    Spring4.3中引进了{@GetMapping.@PostMapping.@PutMapping.@DeleteMapping.@PatchMapping} 来帮助简化常用的HTTP方法的映射 并 ...

  7. 源码-Spring中对bean的@Order注解的处理过程

    目录 前言 DefaultListableBeanFactory OrderComparator 前言 基于Spring-5.2.15.RELEASE版本分析 是使用AnnotationAwareOr ...

  8. Spring中的Bean配置、属性配置、装配内容详细叙述

    文章目录 1.Bean的配置 1.1.配置方式 2.Bean的实例化 2.1.构造器实例化 2.2.静态工厂方式实例化 2.3.实例工厂方式实例化 3.Bean的作用域 3.1.作用域的种类 4.Be ...

  9. Spring源码深度解析(郝佳)-学习-源码解析-Spring MVC(一)

    Spring框架提供了构建Web应用程序的全部功能MVC模块,通过策略接口,Spring框架是高度可配置的,而且支持多种视图技术,例如JavaServer Pages(JSP),Velocity,Ti ...

最新文章

  1. Python读CSV数据
  2. 有没有将深度学习融入机器人领域的尝试?有哪些难点?
  3. java面试必备小知识_Java面试应该准备的知识点系列一
  4. sym--数值矩阵转为符号矩阵
  5. 平台服务器测试3—接口测试工具实现
  6. %hd %d %ld %u ......
  7. LeetCode 1046. 最后一块石头的重量(priority_queue 堆)
  8. 生成同时兼容iOS真机和模拟器的.a包
  9. Windows如何添加Loopback
  10. 单片机的C语言应用程序设计实训教程,单片机的c语言程序设计实训
  11. 文献管理——文献检索篇(一)
  12. Apache FOP 将Java对象转换为pdf文件
  13. KMP 深入理解next数组
  14. 华为鸿蒙福田办公室,华为鸿蒙第一批名单
  15. EXCEL,筛选合并单元格后的全部内容
  16. Android应用权限大全(Manifest.permission)
  17. autograd-自动求导系统
  18. python小游戏之垃圾分类
  19. 有限体积法(11)——交错网格
  20. 光引发剂主要用途_光引发剂2959特性和用途

热门文章

  1. nginx实现负载均衡
  2. Python中的字典排序
  3. python拿什么做可视化界面好-手把手教你用Python做个可视化的“剪刀石头布”小游戏...
  4. python游戏编程入门书籍推荐-游戏编程入门书籍推荐:想要游戏编程尽快入门这些书不要错过...
  5. python程序员工资低吗-程序员嫌工资低拒绝offer,HR:估计你一辈子就是个程序员...
  6. python手机版怎么用-如何优雅的在手机上进行Python编程
  7. python文件输出-python文件流
  8. python基础语法 第0关print-python学习笔记1,新手小白也能看得懂
  9. python绘制动态图-Python图像处理之gif动态图的解析与合成操作详解
  10. python urllib.request 爬虫 数据处理-Python网络爬虫(基于urllib库的get请求页面)