其他分享
首页 > 其他分享> > Spring(一)--SpringBeanIOC的依赖注入

Spring(一)--SpringBeanIOC的依赖注入

作者:互联网

依赖注入的模式与类型

image.png

为什么自动模式不被推荐

Setter方法依赖注入

BeanDefinitionBuilder definitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(UserHolder.class);
// 设置user属性指向superUser这个Bean
definitionBuilder.addPropertyReference("user", "superUser");
BeanDefinition userHolderBeanDefinition = definitionBuilder.getBeanDefinition();
// 将BeanDefinition注入applicationContext中
applicationContext.registerBeanDefinition("userHolder", userHolderBeanDefinition);
// 刷新容器,使得bean被生成
applicationContext.refresh();

构造器注入

BeanDefinitionBuilder definitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(UserHolder.class)
// 定义构造器参数
definitionBuilder.addConstructorArgReference("superUser");
return definitionBuilder.getBeanDefinition();

字段注入

字段注入指的是直接对字段操作,而不是对方法或构造器

方法注入

接口回调注入

image.png

限定注入

1.通过Bean名称限定,在待注入字段上加 @Qualifier('service1') 这个就限定了Bean名称
2.通过分组限定,在@Bean方法上加上@Qualifier,则该Bean被分到了@Qualifier组,如果要扩展组,则自定义注解派生@Qualifier,比如@LoadBalance。被@LoadBalance注解的bean,也能被@Qualifier限定注入,而@Autowired属于没有组,不会注入被分了组的Bean

@Bean
@Qualifier
public User user() {
    return new User()
}

@Autowired
// 这里不会注入上面那个bean,因为user Bean已经被分组了
private User user;

延迟依赖注入

@Autowired
private ObjectProvider<User> objectProvider;

依赖处理过程

@Autowired 注入

@Inject 注入

public AutowiredAnnotationBeanPostProcessor() {
    this.autowiredAnnotationTypes.add(Autowired.class);
    this.autowiredAnnotationTypes.add(Value.class);
    try {
        this.autowiredAnnotationTypes.add((Class<? extends Annotation>)
                                          ClassUtils.forName("javax.inject.Inject", AutowiredAnnotationBeanPostProcessor.class.getClassLoader()));
        logger.trace("JSR-330 'javax.inject.Inject' annotation found and supported for autowiring");
    }
    catch (ClassNotFoundException ex) {
        // JSR-330 API not available - simply skip.
    }
}

Java通用注解注入原理

@Resource
@PostConstruct
@PreDestroy

自定义依赖注入注解

标签:Qualifier,Autowired,--,Spring,definitionBuilder,Bean,SpringBeanIOC,注解,注入
来源: https://blog.csdn.net/Xjzzon/article/details/120693198