• 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
  • 相关阅读:
    洛谷P2805 植物大战僵尸
    洛谷P4307 球队收益
    bzoj4842 Delight for a Cat
    洛谷P2053 修车
    bzoj2561 最小生成树
    bzoj3114 LCM Pair Sum
    洛谷P4486 Kakuro
    bzoj3698 XWW的难题
    关于oracle数据库
    toString方法的用法
  • 原文地址:https://www.cnblogs.com/tianboblog/p/12658552.html
Copyright © 2020-2023  润新知