• 注解-组件注册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
  • 相关阅读:
    js笔记4
    js笔记3
    js笔记2
    js笔记1
    前端笔记13
    (7)第3章的开始
    (6)第2章的尾巴~
    (5)自定义数据结构再探
    我的学习方法(6)
    (4)自定义数据结构初探
  • 原文地址:https://www.cnblogs.com/qmillet/p/13083985.html
Copyright © 2020-2023  润新知