package com.example.demo_3_4;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
/**
* Created by WangBin on 2017/4/20.
*
*/
@Configuration
public class ConditionConfig {
@Bean("WindowsCondition")
@Conditional(WindowsCondition.class)//通过 该注解符合 WindowsCondition里写的 条件的 实例化 WindowsListService
public ListService windowsListService(){
return new WindowsListService();
}
@Bean("LinuxCondition")
@Conditional(LinuxCondition.class)
public ListService linuxListService(){
return new LinuxListService();
}
}
package com.example.demo_3_4;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
/**
* Created by WangBin on 2017/4/20.
*
* Linux 判断条件
*/
public class LinuxCondition implements Condition{
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return conditionContext.getEnvironment().getProperty("os.name").contains("Linux");
}
}
package com.example.demo_3_4;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
/**
* Created by WangBin on 2017/4/20.
* Linux 下 需要创建的Bean 类
*/
public class LinuxListService implements ListService{
@Override
public String showListCmd() {
return "ls";
}
}
package com.example.demo_3_4;
/**
* Created by WangBin on 2017/4/20.
*接口
*/
public interface ListService {
public String showListCmd();
}
package com.example.demo_3_4;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Created by WangBin on 2017/4/20.
*
*/
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionConfig.class);
ListService listService = context.getBean(ListService.class);
System.err.println(context.getEnvironment().getProperty("os.name")+"系统下的列表命令为"+listService.showListCmd());
}
}
package com.example.demo_3_4;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
/**
* Created by WangBin on 2017/4/20.
*
* Windows判断条件
*/
public class WindowsCondition implements Condition{
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return conditionContext.getEnvironment().getProperty("os.name").contains("Windows");
}
}
package com.example.demo_3_4;
import org.springframework.stereotype.Service;
/**
* Created by WangBin on 2017/4/20.
* windows 下 需要创建的bean类
*/
public class WindowsListService implements ListService{
@Override
public String showListCmd() {
return "dir";
}
}