zoukankan      html  css  js  c++  java
  • @Conditional的用法

    @Conditional进行条件判断: 符合条件则加载该bean,不符合则不加载该bean 示例

    1、用于测试的bean实体
    package com.bean;

    /**
    * @auto dh
    * @create 2020-04-25-15:10
    */
    public class Animal {
    }

    package com.bean;

    /**
    * @auto dh
    * @create 2020-04-25-11:00
    */
    public class Person {
    }
    2、实现condition的类
    package com.condition;


    import org.springframework.context.annotation.Condition;
    import org.springframework.context.annotation.ConditionContext;
    import org.springframework.core.type.AnnotatedTypeMetadata;

    /**
    * @auto dh
    * @create 2020-04-25-15:11
    */
    public class Condition001 implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata annotatedTypeMetadata) {
    // context 代表Ioc容器 context.getBeanFactory 从Ioc容器里获取容器工厂
    //    调用该容器工厂,判断是否包含该bean名为animal
    if(context.getBeanFactory().containsBean("animal")){
    return true;
    }
    return false;
    }
    }
    3、配置类
    package com.configuration;

    import com.bean.Animal;
    import com.bean.Person;
    import com.condition.Condition001;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Conditional;
    import org.springframework.context.annotation.Configuration;

    /**
    * @auto dh
    * @create 2020-04-25-15:15
    */
    @Configuration
    public class ConditionTest001 {
    // @Bean
    public Animal animal() {
    return new Animal();
    }

    @Bean
    // 如果Condition001.class返回true,则加载该bean,
    // 否则不加载该bean
    @Conditional(Condition001.class)
    public Person person() {
    return new Person();
    }

    }
    4、测试类
    package com.test;

    import org.springframework.context.annotation.AnnotationConfigApplicationContext;

    /**
    * @auto dh
    * @create 2020-04-25-15:16
    */
    public class ConditionTest001 {
    public static void main(String[] args) {
    AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext(com.configuration.ConditionTest001.class);
    String[] beans=ctx.getBeanDefinitionNames();
    for(String str:beans){
    System.out.println("bean信息:"+str);
    }
    }
    }
     
  • 相关阅读:
    python3.5: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory
    php回溯
    PHPredis长连接pconnect
    php操作redis出现不报错就退出
    MSMQ消息队列
    消息队列使用的四种场景介绍(准载)
    Spring MVC参数封装传递
    Spring MVC配置实例
    .NET项目中使用PostSharp
    C#进阶系列——AOP
  • 原文地址:https://www.cnblogs.com/kukai/p/12773290.html
Copyright © 2011-2022 走看看