2019.6.28 Spring注解

6.28

  • Spring提供了获取操作系统的信息:

    ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Myconfig.class);
            ConfigurableEnvironment contextEnvironment = (ConfigurableEnvironment) applicationContext.getEnvironment();
    /*对应jvm参数中的os.name*/
            String ospropertyname = contextEnvironment.getProperty("os.name");
            System.out.println(ospropertyname);
    
  • Conditional根据条件判断是否将bean注册到容器中

    1. 需要将注解bean的方法加上@Conditional

    2. @Conditiona接受一个Condition类型的CLass数组,

    3. 需要写一个条件类来实现Conditional接口里面的matches

    4. matches的方法形参是ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata

      public class Os implements Condition {
          @Override
          public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
              /*获取ioc使用的beanfactory*/
              ConfigurableListableBeanFactory beanFactory = conditionContext.getBeanFactory();
              /*获取bean定义的注册类*/
              BeanDefinitionRegistry registry = conditionContext.getRegistry();
              Environment environment = conditionContext.getEnvironment();
              String ospropertyname = environment.getProperty("os.name");
      
              /*判断容器中是否含有bean*/
              //boolean person = registry.containsBeanDefinition("person");
              if(ospropertyname.contains("window")){
                  return true;
              }
              return false;
          }
      }
      
posted @ 2019-06-28 22:35  X1aoHei  阅读(67)  评论(0编辑  收藏  举报