IoC添加组件的方式和使用场景

① 使用@Bean

第一种是我们平时使用最多的,主要用于项目内部的组件的注入

② 使用@ComponentScan + @Controller/@Service/@Component/Repository

这种主要用于controller,service,dao等层次分明的场景

③ 使用@Impport/实现ImportSelector

适用于导入外部,第三方组件
有两种实现方式:

  1. 直接导入
@Import(value = {Bus.class})

2.实现ImportSelector

@Configuration
@Import(value = { MyImportSelector.class})
public class InitBean {

    @Resource
    private Car car;

}
public class MyImportSelector implements ImportSelector {

    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[]{"com.caril.learn.initBean.Car"};
    }
}

④ 实现ImportBeanDefinitionRegistrar 动态注册

ImportBeanDefinitionRegistrar 可以比较灵活的实现Bean定义信息的注册,实际上我们在使用的时候都是通过实现该接口来达到按照指定条件注册bean定义信息,来达到注入对应的Bean到IOC容器的目的,可以灵活的按照自己的逻辑注册,且可以通过注解来开启对应的功能
比如:SpringCloud框架的FeignClientsRegistrar类也实现了ImportBeanDefinitionRegistrar

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry, BeanNameGenerator importBeanNameGenerator) {
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Trunk.class);
        registry.registerBeanDefinition("trunk", rootBeanDefinition);
    }
}
@Import(value = {MyImportBeanDefinitionRegistrar.class})
public class InitBean {

    @Resource
    private Trunk trunk;

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容