Spring IOC 条件加载Bean-注解Conditional
1)在配置文件中配置加载类
condition.impl=com.cdchen.study.service.impl.ConditionTestImpl1
2)编写ConditionConfig
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.core.type.classreading.AnnotationMetadataReadingVisitor;
/**
*
* @description: ConditionConfig
*
* @author: cdchen
*
* @create: 2019-05-24 11:05
**/
public class ConditionConfig implements Condition {
@Override
public boolean matches(ConditionContext conditionContext,
AnnotatedTypeMetadata annotatedTypeMetadata) {
AnnotationMetadataReadingVisitor annotationMetadataReadingVisitor = (AnnotationMetadataReadingVisitor) annotatedTypeMetadata;
// 获取配置的实现类
String impl = conditionContext.getEnvironment().getProperty("condition.impl");
// 获取 Conditional 注解的类的className
String className = annotationMetadataReadingVisitor.getClassName();
//判断是否一致
if(impl.equals(className)){
return true;
}else{
return false;
}
}
3)编写接口
public interface ConditionTest {
public void test();
}
4)编写实现类
import com.cdchen.study.service.ConditionTest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Component;
/**
*
* @description: ConditionTestImpl1
*
* @author: cdchen
*
* @create: 2019-05-24 11:03
**/
@Slf4j
@Conditional({ ConditionConfig.class})
@Component
public class ConditionTestImpl1 implements ConditionTest {
@Override
public void test() {
log.info("这是ConditionTestImpl1实现");
}
}
import com.cdchen.study.service.ConditionTest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Component;
/**
*
* @description: ConditionTestImpl2
*
* @author: cdchen
*
* @create: 2019-05-24 11:04
**/
@Slf4j
@Conditional({ ConditionConfig.class})
@Component
public class ConditionTestImpl2 implements ConditionTest {
@Override
public void test() {
log.info("这是ConditionTestImpl2 实现");
}
}
5)验证
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
ConditionTest conditionTest = SpringBeanUtil.getBean(ConditionTest.class);
conditionTest.test();
}
结果如下
15:58:49.283 [main] INFO com.cdchen.study.Application - Started Application in 8.339 seconds (JVM running for 12.797)
15:58:49.284 [main] INFO c.c.s.s.impl.ConditionTestImpl1 - 这是ConditionTestImpl1实现