Spring高级话题——Conditional

标签: Spring的条件判断
48人阅读 评论(0) 收藏 举报
分类:

@Conditional根据满足某一个特定条件创建一个特定Bean。比方说,当某一个jar包在一个类路径下的时候,自动配置一个或多个Bean,或者只有某个Bean被创建才会创建另外一个Bean。总的来说,就是根据特定条件控制Bean的创建行为,这样我们就可以利用这个特性进行一些自动的配置。

实例代码:(该实例代码是以jar包在哪个环境下运行,调用哪个类)

ConditionConfig.java

package com.minivison.caixing.learn.condition;

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

/**
 * <Description> <br>
 *
 * @author caixing<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2018年04月17日 <br>
 */
@Configuration
public class ConditionConfig {

    @Bean
    @Conditional(WindowsCondition.class)
    public ListService windowListService(){
        return new WindowsService();
    }

    @Bean
    @Conditional(LinuxCondition.class)
    public ListService linuxListService(){
        return new LinuxService();
    }


}

LinuxCondition.java

package com.minivison.caixing.learn.condition;

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

/**
 * <Description> <br>
 *
 * @author caixing<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2018年04月17日 <br>
 */
public class LinuxCondition implements Condition {

    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return conditionContext.getEnvironment().getProperty("os.name").contains("Linux");
    }
}

LinuxService.java

package com.minivison.caixing.learn.condition;

/**
 * <Description> <br>
 *
 * @author caixing<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2018年04月17日 <br>
 */
public class LinuxService implements ListService {
    @Override
    public String showListCmd() {
        return "ls";
    }
}

ListService.java

package com.minivison.caixing.learn.condition;

/**
 * <Description> <br>
 *
 * @author caixing<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2018年04月17日 <br>
 */
public interface ListService {
    String showListCmd();
}

WindowsCondition.java

package com.minivison.caixing.learn.condition;

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

/**
 * <Description> <br>
 *
 * @author caixing<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2018年04月17日 <br>
 */
public class WindowsCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return conditionContext.getEnvironment().getProperty("os.name").contains("Windows");
    }
}

WindowsService.java

package com.minivison.caixing.learn.condition;

/**
 * <Description> <br>
 *
 * @author caixing<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2018年04月17日 <br>
 */
public class WindowsService implements ListService {
    @Override
    public String showListCmd() {
        return "dir";
    }
}

Main.java

package com.minivison.caixing.learn;

import com.minivison.caixing.learn.condition.ConditionConfig;
import com.minivison.caixing.learn.condition.ListService;
import com.minivison.caixing.learn.scheduled.TaskSchedulerConfig;
import com.minivison.caixing.learn.scheduled.TaskService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import javax.imageio.stream.FileImageInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * <Description> <br>
 *
 * @author caixing<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2018年04月12日 <br>
 */
public class Main {
    public static void main(String[] args) throws Exception {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionConfig.class);
        ListService service = context.getBean(ListService.class);
        System.out.println(service.showListCmd());
        //context.close();
        //String str = Base64Utils.encodeToString(image2byte("E:\\123.jpg"));
        //System.out.println(str);

    }

    public static byte[] image2byte(String path) {
        byte[] data = null;
        FileImageInputStream input = null;
        try {
            input = new FileImageInputStream(new File(path));
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            int numBytesRead = 0;
            while ((numBytesRead = input.read(buf)) != -1) {
                output.write(buf, 0, numBytesRead);
            }
            data = output.toByteArray();
            output.close();
            input.close();
        } catch (FileNotFoundException ex1) {
            ex1.printStackTrace();
        } catch (IOException ex1) {
            ex1.printStackTrace();
        }
        return data;
    }
}

查看评论

内存这个大话题-4.1.C语言高级专题第一部分

-
  • 1970年01月01日 08:00

【Spring】Spring高级话题-测试Spring项目

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自【大学之旅_谙忆的博客】 进行本示例的演示,需要先配置好Maven和Spring哦、 见: 【Spring...
  • qq_26525215
  • qq_26525215
  • 2016-12-10 11:37:48
  • 1630

浅谈spring中@Conditional(条件注解)

通过@Conditional注解可以根据代码中设置的条件装载不同的bean,在设置条件注解之前,先要把装载的bean类去实现Condition接口,然后对该实现接口的类设置是否装载的条件,下面通过代码...
  • u010502101
  • u010502101
  • 2017-08-01 20:03:08
  • 542

借助@Conditional实现自定义初始化Spring Bean

本项目使用传统的Spring MVC框架进行搭建,未使用Spring Boot,而需要实现根据用户配置自动选择TCP、UDP、串口等不同协议进行数据获取,还有用户若在内网,实现短信服务动态关闭(wsi...
  • zxl287964464
  • zxl287964464
  • 2017-06-18 12:56:58
  • 670

spring @conditional

@Conditional为按照条件配置spring的bean提供了支持,即满足某种条件下,怎么配置对应的bean;应用场景 当某一个jar包在classpath中的时候,配置某几个bean;当某...
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2016-04-22 18:48:05
  • 589

Spring-boot中Conditional介绍

原文地址:http://www.jianshu.com/p/0740c07f6c1d @Conditional 官方文档定义:“Indicates that a component is onl...
  • tanga842428
  • tanga842428
  • 2017-11-23 15:12:43
  • 225

Spring 条件注解(@Conditional)

通过活动的profile,我们可以获得不同的Bean。Spring 4提供了一个更通用的基于条件的Bean的创建方式,即使用@Conditional注解。 @Conditional根据满足某个特定的...
  • xiaolyuh123
  • xiaolyuh123
  • 2017-03-20 14:26:29
  • 4933

《Python学习手册》学习笔记(19)之第19章函数的高级话题(关键词:编程语言/Python/递归函数/匿名函数)

第19章 函数的高级话题参考文献: 1.《Python学习手册》。
  • qq_33528613
  • qq_33528613
  • 2017-10-07 09:57:49
  • 106

Spring @Conditional使用指南

话不多说,先上代码:public interface YRZTClient { YRZTClient getYRZTClient(); String getUser(); Strin...
  • ksdb0468473
  • ksdb0468473
  • 2017-06-09 15:43:31
  • 581

Spring4中的@Profile和@Conditional注解的源码解析

@Profile和@Bean一起使用,决定要不要创建这个bean。 先来看一下@Profile的源码: @Target({ElementType.TYPE, ElementType.METHOD}...
  • jia_costa
  • jia_costa
  • 2018-01-31 10:04:03
  • 80
    个人资料
    持之以恒
    等级:
    访问量: 921
    积分: 258
    排名: 30万+
    最新评论