`
wiselyman
  • 浏览: 2094070 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
博客专栏
Group-logo
点睛Spring4.1
浏览量:82332
74ae1471-94c5-3ae2-b227-779326b57435
点睛Spring MVC4...
浏览量:130806
社区版块
存档分类
最新评论

17点睛Spring4.1-@Conditional

 
阅读更多

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
package com.wisely.conditional;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class WindowsCondition implements Condition {

    public boolean matches(ConditionContext context,
            AnnotatedTypeMetadata metadata) {
        return context.getEnvironment().getProperty("os.name").contains("Windows");
    }

}
  • LinuxCondition
package com.wisely.conditional;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class LinuxCondition implements Condition {

    public boolean matches(ConditionContext context,
            AnnotatedTypeMetadata metadata) {
        return context.getEnvironment().getProperty("os.name").contains("Linux");
    }

}

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

  • 接口
package com.wisely.conditional;


public interface CommandService {

    public String showListCommand();
}
  • WindowsCommnadService
package com.wisely.conditional;

public class WindowsCommnadService implements CommandService {

    public String showListCommand() {
        return "dir";
    }

}
  • LinuxCommandService
package com.wisely.conditional;

public class LinuxCommandService implements CommandService {

    public String showListCommand() {
        return "ls";
    }

}

17.2.3 编写配置类

package com.wisely.conditional;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DemoConfig {
    @Bean
    @Conditional(WindowsCondition.class)
    public CommandService commandService() {
        return new WindowsCommnadService();
    }

    @Bean
    @Conditional(LinuxCondition.class)
    public CommandService linuxEmailerService() {
        return new LinuxCommandService();
    }

}

17.2.4 测试

  • windows下
package com.wisely.conditional;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext("com.wisely.conditional");
        CommandService cs = context.getBean(CommandService.class);
        System.out.println(cs.showListCommand());
        context.close();
    }
}

输出结果

dir
  • Linux下(本例没有切换到linux,直接修改os.name为Linux)
package com.wisely.conditional;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

    public static void main(String[] args) {
        System.setProperty("os.name", "Linux");
        AnnotationConfigApplicationContext context =  new AnnotationConfigApplicationContext("com.wisely.conditional");
        CommandService cs = context.getBean(CommandService.class);
        System.out.println(cs.showListCommand());
        context.close();

    }
}

输出结果

ls

新书推荐《JavaEE开发的颠覆者: Spring Boot实战》,涵盖Spring 4.x、Spring MVC 4.x、Spring Boot企业开发实战。

 

京东地址:http://item.jd.com/11894632.html

当当地址:http://product.dangdang.com/23926195.html

亚马逊地址:http://www.amazon.cn/图书/dp/B01D5ZBFUK/ref=zg_bsnr_663834051_6 

淘宝地址:https://item.taobao.com/item.htm?id=528426235744&ns=1&abbucket=8#detail

 

 

 

或自己在京东、淘宝、亚马逊、当当、互动出版社搜索自选。

 


0
0
分享到:
评论

相关推荐

    Spring In Action-3.2@Conditional条件化Bean

    Spring In Action-3.2@Conditional条件化Bean,Spring In Action-3.2@Conditional条件化Bean,Spring In Action-3.2@Conditional条件化Bean

    Spring @Conditional注解原理解析

    "Spring @Conditional注解原理解析" Spring @Conditional注解是 Spring 4 新提供的注解,主要用于根据某个条件加载特定的 bean。该注解可以与 @Profile 注解配合使用,以根据不同的操作系统环境加载不同的 bean。 ...

    spring里@Conditional注解使用示例代码

    在Spring框架中,`@Conditional`注解是一个强大的特性,它允许我们有条件地加载bean,也就是说,只有当特定条件满足时,对应的bean才会被Spring容器实例化并注册。这个注解是Spring Boot的一个核心功能,使得我们...

    SpringBoot中使用@Conditional示例代码

    在Spring Boot框架中,`@Conditional`注解是条件装配的核心工具,它允许我们基于某些条件来决定是否加载或注册一个Bean。这个功能使得我们能够更精细化地控制应用的配置,仅在满足特定条件时才会激活某个Bean。下面...

    spring4.0 Conditional在满足特定条件下,才会实例化对象.docx

    Spring 4.0 引入了@Conditional注解,它提供了一种更加灵活的方式来决定何时实例化一个对象,根据特定的条件。这个功能使得我们能够更精细化地控制Spring容器中的bean装配,仅在满足特定条件时才创建和注册bean。 ...

    @Conditional注解应用.rar

    在Java Spring框架中,`@Conditional`注解是实现条件化bean注入的关键工具。这个注解允许我们在配置bean时设置一些条件,只有当这些条件满足时,对应的bean才会被Spring容器实例化并注入到应用程序中。这样的设计极...

    spring-example-conditional:带有 Spring Boot 的自定义 Spring 4 @Conditional 注释示例

    自定义@Conditional 注释示例什么是@Conditional 是添加到 Spring 4 的注解,用于指定处理特定配置或将特定 bean 注册到 Spring 上下文的条件。为什么重要Spring Boot 项目自动配置支持依赖于 @Conditional - 它有...

    Spring之条件注解@Conditional(Demo)

    在Spring框架中,`@Conditional`注解是一个强大的特性,它允许我们基于特定的条件来决定是否注册某个Bean。这个注解使得我们能够在运行时根据系统环境、配置或其他自定义逻辑来选择性地加载和初始化Bean。这为我们的...

    Spring条件注解@Conditional示例详解

    "Spring条件注解@Conditional示例详解" Spring框架中提供了一个强大的条件注解@Conditional,它允许开发者根据特定的条件来控制Bean的创建行为。@Conditional注解可以应用于类和方法上,需要传入一个实现了...

    Spring @Conditional注解讲解及示例详解

    Spring @Conditional注解讲解及示例详解 Spring @Conditional注解是Spring框架中的一种重要注解,它可以根据一定的条件进行判断,满足条件则将Bean注册到容器中。@Conditional注解可以标注在类和方法上,它的定义...

    Spring boot中@Conditional和spring boot的自动配置实例详解

    "Spring Boot 中 @Conditional 和 Spring Boot 的自动配置实例详解" Spring Boot 中的自动配置是指根据不同的情况来决定 Spring 配置应该用哪个,不应该用哪个。这种机制可以让开发者更方便地进行开发和配置。在 ...

    浅谈SpringBoot中的@Conditional注解的使用

    @Conditional 注解是 Spring 4.0 之后出的一个非常有用的注解,主要用于根据具体的条件决定是否创建 Bean 到 Spring 容器中。下面我们来详细介绍 @Conditional 注解的使用。 @Conditional 注解的作用 @Conditional...

    Worst-Case_Conditional_Value-at-Risk_with_Applicat.pdf

    Zhu, S. , & Fukushima, M. (2009). Worst-case conditional value-at-risk with applica- tion to robust portfolio management. Operations Research, 57 (5), 1155–1168 .

    rh-perl524-perl-Module-Load-Conditional-0.64-379.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    perl-Module-Load-Conditional-0.54-3.el7.noarch.rpm

    离线安装包,亲测可用

    spring-boot-2.0.0.M7 源码包

    这个源码包,"spring-boot-2.0.0.M7",是Spring Boot的2.0.0预发布版本,M7代表的是第七个Milestone版本,即在正式版发布前的阶段性版本,通常用于测试和完善功能。 Spring Boot的核心特点包括自动配置、起步依赖、...

    SpringBoot2的最佳实践 SpringBoot2基础入门+底层注解+自动配置+高级特性与原理解析

    课程内容以时下最新的技术点为主线,逐步的进行展开,分别细化的讲解了SpringBoot2基础课程,SpringBoot2底层注解,SpringBoot2自动化配置,SpringBoot2请求处理,SpringBoot2高级特性和原理分析,是不可错过的...

    Spring注解@Conditional案例解析

    Spring注解@Conditional案例解析 @Conditional是一个Spring4提供的注解,用于按照一定的条件进行判断,满足条件给容器注册Bean。下面是对@Conditional的详细解析和示例代码。 一、@Conditional介绍 @Conditional...

    Spring Boot @Conditional注解用法示例介绍

    在Spring Boot框架中,`@Conditional`注解是条件化注解的核心,它允许你在创建Bean时设置特定的条件。当这些条件满足时,Bean才会被Spring容器注册并实例化。这一特性使得开发者可以根据应用程序的具体环境和配置...

    Spring注解驱动开发实战-annotation

    在Spring框架中,注解驱动的开发极大地简化了配置,提高了开发效率。Spring注解的主要目的是减少XML配置,使得代码更加简洁、可读性更强。本文将深入探讨Spring注解驱动开发中的关键概念,包括组件注册、生命周期...

Global site tag (gtag.js) - Google Analytics