zoukankan      html  css  js  c++  java
  • 注解-组件注册03-@Scope @Lazy @Conditional

    一、@Scope

    默认单例
    1. singleton 单实例(默认值),IOC容器启动会调用方法创建对象放在容器中,以后每次获取直接从容器中拿
    2. prototype 多实例,IOC容器启动不会调用方法创建对象放在容器中,每次获取时才会调用方法创建对象--懒加载
    3. request 同一个请求创建一个实例
    4. session 同一个session创建一个实例

     二、@Lazy

    懒加载,默认是true

    三、@Conditional

    @Conditional({Condition}):按照一定的条件进行判断,满足条件给容器中注册bean
    @Configuration
    public class MainConfig2 {
        /**
         * @Conditional({Condition}):按照一定的条件进行判断,满足条件给容器中注册bean
         * 如果系统是windows,给容器注册bill
         * 如果系统是linux,给容器注册linus
         * @return
         */
        @Conditional({WinCondition.class})//该注解也可以配置在类上
        @Bean("bill")
        public Person person01(){
            return new Person("Bill Gates",62);
        }
        @Conditional({LinuxCondition.class})
        @Bean("linux")
        public Person person02(){
            return new Person("linus",48);
        }
    }
    /**
     * @author Millet
     * @date 2020/6/8 23:28
     */
    public class LinuxCondition implements Condition {
        /**
         *
         * @param conditionContext 判断条件能使用的上下文(环境)
         * @param annotatedTypeMetadata 注释信息
         * @return
         */
        @Override
        public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
            //判断是否是Linux系统
            //1.获取到IOC使用的beanFactory
            ConfigurableListableBeanFactory beanFactory = conditionContext.getBeanFactory();
            //2. 获取到类加载器
            ClassLoader classLoader = conditionContext.getClassLoader();
            //3. 获取到当前环境信息
            Environment environment = conditionContext.getEnvironment();
            //4. 获取到bean定义的注册类
            BeanDefinitionRegistry registry = conditionContext.getRegistry();
    
            String property = environment.getProperty("os.name");
            if(property.contains("Linux")){
                return true;
            }
            return false;
        }
    }
    LinuxCondition
    /**
     * @author Millet
     * @date 2020/6/8 23:28
     */
    public class WinCondition implements Condition {
    
        @Override
        public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
            Environment environment = conditionContext.getEnvironment();
            String property = environment.getProperty("os.name");
            if(property.contains("Windows")){
                return true;
            }
            return false;
        }
    }
    WinCondition
  • 相关阅读:
    国外物联网平台(8):Telit
    国外物联网平台(7):FogHorn
    国外物联网平台(6):Electric Imp
    国外物联网平台(5):Exosite Murano
    国外物联网平台(4):Ayla Networks
    国内物联网平台(8):中移物联网开放平台OneNet
    Backbone入门讲解
    underscore.js库的浅析
    Backbone框架浅析
    Handlebars模板库浅析
  • 原文地址:https://www.cnblogs.com/qmillet/p/13083985.html
Copyright © 2011-2022 走看看