• spring-boot学习笔记之Conditional


    今天看了@Conditional,自己根据以下文章练了下,根据自己的理解操作的

     
     
     
     
     
     

    转载出处:http://wiselyman.iteye.com/blog/2213054

    17.1 @Conditional

    @Conditional为按照条件配置spring的bean提供了支持,即满足某种条件下,怎么配置对应的bean;

    应用场景

    当某一个jar包在classpath中的时候,配置某几个bean;

    当某一个bean配置好后,会自动配置一个特定的bean;

    当某种环境变量被设置后,创建某个bean;

    @Conditional为敏捷开发所提倡的原则"习惯优于配置"提供了支持;

    @Conditional是Spring Boot快速开发框架实现"习惯优于配置"的核心技术;

    17.2 示例

    演示在windows和linux系统下,初始化不同的bean,windows和linux作为判断条件;

    17.2.1 构造判断条件

    条件的构造需要类实现Condition接口,并实现matches方法

    WindowsCondition

    packagecom.wisely.conditional;importorg.springframework.context.annotation.Condition;importorg.springframework.context.annotation.ConditionContext;importorg.springframework.core.type.AnnotatedTypeMetadata;publicclassWindowsConditionimplementsCondition{publicbooleanmatches(ConditionContextcontext,AnnotatedTypeMetadatametadata) {returncontext.getEnvironment().getProperty("os.name").contains("Windows");    }}

    LinuxCondition

    packagecom.wisely.conditional;importorg.springframework.context.annotation.Condition;importorg.springframework.context.annotation.ConditionContext;importorg.springframework.core.type.AnnotatedTypeMetadata;publicclassLinuxConditionimplementsCondition{publicbooleanmatches(ConditionContextcontext,AnnotatedTypeMetadatametadata) {returncontext.getEnvironment().getProperty("os.name").contains("Linux");    }}

    17.2.2 编写不同条件下需要的bean

    接口

    packagecom.wisely.conditional;publicinterfaceCommandService{publicStringshowListCommand();}

    WindowsCommnadService

    packagecom.wisely.conditional;publicclassWindowsCommnadServiceimplementsCommandService{publicStringshowListCommand() {return"dir";    }}

    LinuxCommandService

    packagecom.wisely.conditional;publicclassLinuxCommandServiceimplementsCommandService{publicStringshowListCommand() {return"ls";    }}

    17.2.3 编写配置类

    packagecom.wisely.conditional;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Conditional;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassDemoConfig{@Bean@Conditional(WindowsCondition.class)publicCommandServicecommandService() {returnnewWindowsCommnadService();    }@Bean@Conditional(LinuxCondition.class)publicCommandServicelinuxEmailerService() {returnnewLinuxCommandService();    }}

    17.2.4 测试

    windows下

    packagecom.wisely.conditional;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;publicclassMain{publicstaticvoidmain(String[]args) {AnnotationConfigApplicationContextcontext=newAnnotationConfigApplicationContext("com.wisely.conditional");CommandServicecs=context.getBean(CommandService.class);System.out.println(cs.showListCommand());        context.close();    }}

    输出结果

    dir

    Linux下(本例没有切换到linux,直接修改os.name为Linux)

    packagecom.wisely.conditional;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;publicclassMain{publicstaticvoidmain(String[]args) {System.setProperty("os.name","Linux");AnnotationConfigApplicationContextcontext=newAnnotationConfigApplicationContext("com.wisely.conditional");CommandServicecs=context.getBean(CommandService.class);System.out.println(cs.showListCommand());        context.close();    }}

    输出结果

    ls

    原文链接:

    http://www.jianshu.com/p/4920f6a47a14


    关注我的公众号,都是满满的干货!
  • 相关阅读:
    水晶苍蝇拍:从“航空母舰”看企业竞争优势分析 (2010-05-11 11:48:38)
    水晶苍蝇拍:为何设定了安全边际后还吃大跌?
    水晶苍蝇拍:“低风险,高不确定性”的启示 (2010-04-24 22:02:13)
    水晶苍蝇拍:我这样看投资的安全性 (2009-08-27 20:08:53)
    水晶苍蝇拍:不同企业的估值差告诉我们什么? (2010-04-21 20:56:19)
    水晶苍蝇拍:估值,像雾像雨又像风 (2010-03-15 10:44:16)
    水晶苍蝇拍:长持的简单逻辑 (2009-05-25 18:08:43)
    Android中RelativeLayout各个属性的含义
    有道词典 Andriod 版本数据格式分析
    电驴提示“该内容尚未提供权利证明,无法提供下载”之解决办法详解
  • 原文地址:https://www.cnblogs.com/springboot/p/8051907.html
Copyright © 2020-2023  润新知