@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; } }