IoC添加組件的方式和使用場景

① 使用@Bean

第一種是我們平時使用最多的,主要用于項(xiàng)目內(nèi)部的組件的注入

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

這種主要用于controller,service,dao等層次分明的場景

③ 使用@Impport/實(shí)現(xiàn)ImportSelector

適用于導(dǎo)入外部,第三方組件
有兩種實(shí)現(xiàn)方式:

  1. 直接導(dǎo)入
@Import(value = {Bus.class})

2.實(shí)現(xiàn)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"};
    }
}

④ 實(shí)現(xiàn)ImportBeanDefinitionRegistrar 動態(tài)注冊

ImportBeanDefinitionRegistrar 可以比較靈活的實(shí)現(xiàn)Bean定義信息的注冊,實(shí)際上我們在使用的時候都是通過實(shí)現(xiàn)該接口來達(dá)到按照指定條件注冊bean定義信息,來達(dá)到注入對應(yīng)的Bean到IOC容器的目的,可以靈活的按照自己的邏輯注冊,且可以通過注解來開啟對應(yīng)的功能
比如:SpringCloud框架的FeignClientsRegistrar類也實(shí)現(xiàn)了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;

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容