Spring Advanced Topics - Conditional

@Conditional creates a specific bean based on meeting a specific condition. For example, when a jar package is in a classpath, one or more beans are automatically configured, or another bean is created only when a bean is created. In general, it is to control the creation behavior of beans according to specific conditions, so that we can use this feature to perform some automatic configuration.

Example code: (the example code is based on which environment the jar package runs in and which class to call)

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 April 17, 2018 <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 April 17, 2018 <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 April 17, 2018 <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 April 17, 2018 <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 April 17, 2018 <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 April 17, 2018 <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 April 12, 2018 <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;
    }
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324519421&siteId=291194637