zoukankan      html  css  js  c++  java
  • Spring中AutowireMode(自动装配模型)

    主要包含如下几种类型:

    //不自动注入
    AbstractBeanDefinition.AUTOWIRE_NO
    //根据类型自动装配(但是这个类型是根据set***方法进行装配的)
    AbstractBeanDefinition.AUTOWIRE_BY_TYPE
    //根据名称自动装配
    AbstractBeanDefinition.AUTOWIRE_BY_NAME
    //根据构造函数自动装配
    AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR

    默认为AUTOWIRE_NO

    如下示例可以证明:

    定义了两个测试类:

    @Repository
    public class UserDao1 {
        private BookDao1 bookDao1;
    
    
        public BookDao1 getBookDao1() {
            return bookDao1;
        }
    
    
        public void setBookDao1(BookDao1 bookDao1) {
            System.out.println("setBookDao1.......");
            this.bookDao1 = bookDao1;
        }
    }
    
    
    @Repository
    public class BookDao1 {
    

    配置类:

    @Configuration
    @ComponentScan("com.tian")
    public class AppConfig {
    
    
    }

    测试发现,最终BookDao1并没有自动注入:

    @Test
    public void test_auto(){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        System.out.println(context.getBean(UserDao1.class).getBookDao1());
    }

    可以通过修改spring自动注入模型进行调整,扩展ImportBeanDefinitionRegistrar:

    public class MyImportRegistrar implements ImportBeanDefinitionRegistrar {
    
    
        @Override
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
            GenericBeanDefinition beanDefinition = (GenericBeanDefinition) registry.getBeanDefinition("userDao1");
            
    //修改自动注入模型  
    beanDefinition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
            registry.registerBeanDefinition("userDao1", beanDefinition);
        }
    }

    再次执行上面的测试发现BookDao1就会被自动注入了;当然这也说明了一个问题:AUTOWIRE_BY_TYPE是根据set属性进行注入的;这个装配模型中AUTOWIRE_BY_TYPE并不等于通常大家所说的@Autowired可以通过类型来找对应的类。

    public void setBookDao1(BookDao1 bookDao1) {
    }



    参见:https://juejin.im/post/5d99fcc7e51d457822796ea1
  • 相关阅读:
    机器学习【九】数据表达与特征工程
    机器学习【八】数据预处理、降维、特征提取及聚类
    机器学习【七】神经网络
    机器学习【六】支持向量机SVM——专治线性不可分
    机器学习【五】随机森林
    机器学习【四】决策树
    单片机简介 & 点亮LED & 流水灯 & 电路基础
    PHP表单
    机器学习【三】朴素贝叶斯
    PHP 【六】
  • 原文地址:https://www.cnblogs.com/tianboblog/p/12658552.html
Copyright © 2011-2022 走看看