首页 > 编程语言 > 详细

Spring中AutowireMode(自动装配模型)

时间:2020-04-08 11:40:37      阅读:301      评论:0      收藏:0      [点我收藏+]

主要包含如下几种类型:

//不自动注入
AbstractBeanDefinition.AUTOWIRE_NO
//根据类型自动注入
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属性进行注入的:

public void setBookDao1(BookDao1 bookDao1) {
}

Spring中AutowireMode(自动装配模型)

原文:https://www.cnblogs.com/tianboblog/p/12658552.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!