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實現