iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring @Profile注解如何使用
  • 865
分享到

Spring @Profile注解如何使用

2023-07-06 03:07:29 865人浏览 安东尼
摘要

这篇文章主要介绍“spring @Profile注解如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring @Profile注解如何使用”文章能帮助大家解决问题。使用

这篇文章主要介绍“spring @Profile注解如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring @Profile注解如何使用”文章能帮助大家解决问题。

    使用

    带有@Profile的注解的bean的不会被注册进ioc容器,需要为其设置环境变量激活,才能注册进ioC容器,如下通过setActiveProfiles设置了dev值,那么这三个值所对应的Bean会被注册进IOC容器。当然,我们在实际使用中,不会这样去做,使用SpringBoot的话,我们一般是使用yml,在yml中配置spring.profiles.active,也可以通过配置JVM参数。

    通过Environment设置profile

    我们可以直接通过Environment来设置环境属性,这是比较原生的方法。

    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();context.getEnvironment().setActiveProfiles("dev");

    通过JVM参数设置

    可以通过JVM参数来设置环境变量的值,在开发中,这种方式也是使用得比较普遍。

    Spring @Profile注解如何使用

    SpringBoot通过yml进行配置

    在SpringBoot项目中,我们得配置项一般都是配置在yml文件中,这样就能和代码分开,并且也能进行动态配置。

    Spring @Profile注解如何使用

    从上面我们看出可以通过好几种方式进行配置,但是他们最终其实都是将环境变量设置进Environment中,这样,spring在后续得流程里面,就能从Environment中获取环境变量,然后进行相应的逻辑处理。

    源码解析

    BeanDefinition注册

    首先,需要注册bean的元信息BeanDefinition,不过对于@Profile标注的方法,如果环境变量中有对应的变量值,那么就能注册,没有的话则不会进行注册,我们来看关键的代码,在ConfigurationClassBeanDefinitionReader中,有一个shouldSkip判断,它会筛选出符合的bean,不符合条件的bean则被加入skippedBeanMethods集合中,不会被注册。

    private void loadBeanDefinitionsForBeanMethod(BeanMethod beanMethod) {ConfigurationClass confiGClass = beanMethod.getConfigurationClass();MethodMetadata metadata = beanMethod.getMetadata();String methodName = metadata.getMethodName();// Do we need to mark the bean as skipped by its condition?if (this.conditionEvaluator.shouldSkip(metadata, ConfigurationPhase.REGISTER_BEAN)) {            configClass.skippedBeanMethods.add(methodName);            return;}            if (configClass.skippedBeanMethods.contains(methodName)) {            return;}}

    shouldSkip源码

    在shouldSkip中,会使用Condition接口,@Profile使用的是ProfileCondition,然后调用matches方法。

        public boolean shouldSkip(@Nullable AnnotatedTypeMetadata metadata, @Nullable ConfigurationCondition.ConfigurationPhase phase) {        for (Condition condition : conditions) {            ConfigurationCondition.ConfigurationPhase requiredPhase = null;            if (condition instanceof ConfigurationCondition configurationCondition) {                requiredPhase = configurationCondition.getConfigurationPhase();            }            if ((requiredPhase == null || requiredPhase == phase) && !condition.matches(this.context, metadata)) {                return true;            }        }        return false;    }

    ProfileCondition匹配

    在ProfileCondition的matches方法中,主要就是去Environment中寻找环境变量,然后解析@Profile注解设置的value值,如果Environment中激活的配置中包含当前的配置,包含则能为true,不包含则为false,如上通过setActiveProfiles设置Environment中激活的配置为dev,当前传过来的配置为dev,那么就能匹配上,就能装配进IOC容器。

        public 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(Profiles.of((String[]) value))) {                    return true;                }            }            return false;        }        return true;    }

    从源码可以看出,其最核心的思想就是是否注册bean的元信息BeanDefinition,因为只有注册了BeanDefinition,后续才能为创建bean提供元数据支持,判断是否注册bean元信息,主要就是从Environment中取出profiles的值,然后和@Profile注解设置的值进行匹配,匹配得上就注册,bean不上就不注册。

    关于“Spring @Profile注解如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: Spring @Profile注解如何使用

    本文链接: https://www.lsjlt.com/news/357622.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Spring @Profile注解如何使用
      这篇文章主要介绍“Spring @Profile注解如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring @Profile注解如何使用”文章能帮助大家解决问题。使用...
      99+
      2023-07-06
    • @profile注解如何在spring中使用
      本篇文章给大家分享的是有关@profile注解如何在spring中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先是新建maven工程mvn archetype:gene...
      99+
      2023-05-30
      spring profile
    • 详解Spring @Profile注解的使用和源码解析
      目录介绍使用通过Environment设置profile通过JVM参数设置SpringBoot通过yml进行配置源码解析BeanDefinition注册shouldSkip源码Pro...
      99+
      2023-05-15
      Spring @Profile注解使用 Spring @Profile注解 Spring @Profile
    • Spring @InitBinder注解如何使用
      这篇文章主要讲解了“Spring @InitBinder注解如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring @InitBinder注解如何使用”吧!一...
      99+
      2023-07-05
    • spring注解之@profile的示例分析
      这篇文章给大家分享的是有关spring注解之@profile的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。spring中@profile与maven中的profile很相似,通过配置来改变参数。例如在开...
      99+
      2023-05-31
      spring profile
    • Spring @ComponentScan注解如何使用
      今天小编给大家分享一下Spring @ComponentScan注解如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
      99+
      2023-07-05
    • 如何使用注解开发spring
      本篇文章为大家展示了如何使用注解开发spring,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在Spring4之后,要使用注解开发,必须要保证aop的包导入了。使用注解需要导入context约束,增...
      99+
      2023-06-15
    • Java中如何使用Spring注解
      Java中如何使用Spring注解,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在Spring4之后,要使用注解开发,必须要保证aop的包导入了使用注解需要导入contex...
      99+
      2023-06-20
    • Spring中@ModelAttribute注解如何使用
      这期内容当中小编将会给大家带来有关Spring中@ModelAttribute注解如何使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.@ModelAttribute注释方法   例子(1)...
      99+
      2023-06-02
    • spring中如何使用@Service注解
      本篇文章为大家展示了spring中如何使用@Service注解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。@Service注解的使用要说明@Service注解的使用,就得说一下我们经常在sprin...
      99+
      2023-06-20
    • 详解spring如何使用注解开发
      在Spring4之后,要使用注解开发,必须要保证aop的包导入了。 使用注解需要导入context约束,增加注解的支持。 <?xml version="1.0" ...
      99+
      2024-04-02
    • 如何在Spring中使用@Transactional注解
      这期内容当中小编将会给大家带来有关如何在Spring中使用@Transactional注解,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。@Transactionalservice A(){try...
      99+
      2023-06-15
    • 使用Spring MVC4 如何配置注解
      使用Spring MVC4 如何配置注解?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在传统的Spring项目中,我们要写一堆的XML文件。而这些XML文件格式...
      99+
      2023-05-31
      springmvc 注解配置
    • 如何使用注解配置Spring容器
      这篇文章给大家分享的是有关如何使用注解配置Spring容器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:@Configuration标注在类上,相当于将该类作为spring的xml的标签@Configu...
      99+
      2023-05-30
      spring
    • 使用Spring Aop如何配置AspectJ注解
      这篇文章将为大家详细讲解有关使用Spring Aop如何配置AspectJ注解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。采用的jdk代理,接口和实现类代码请参考上篇博文。主要是将Aspe...
      99+
      2023-05-31
      springaop aspectj
    • C++中profile如何使用
      这篇文章将为大家详细讲解有关C++中profile如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。自从VC6以后,C++ profile功能便从Team Server Editions...
      99+
      2023-06-17
    • Spring注解@Configuration与@Bean注册组件如何使用
      今天小编给大家分享一下Spring注解@Configuration与@Bean注册组件如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
      99+
      2023-07-02
    • Spring Boot常用功能Profile详解
      入口 相关逻辑的入口是listener类:ConfigFileApplicationListener,当容器广播器触发ApplicationEnvironmentPreparedEv...
      99+
      2024-04-02
    • spring boot 如何指定profile启动
      spring boot项目可为不同的环境配置相应的配置文件 如下图所示: pom.xml配置如下: <dependencies> 其他依赖 <...
      99+
      2024-04-02
    • Spring Security中的权限注解如何使用
      今天小编给大家分享一下Spring Security中的权限注解如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
      99+
      2023-06-30
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作