最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springbean的八種加載方式匯總

 更新時間:2022年10月12日 10:31:26   作者:桃花雪  
這篇文章主要介紹了springbean的八種加載方式,一種是XML方式聲明bean,使用@Component及其衍生注解@Controller?、@Service、@Repository定義bean,還有其他方法,本文給大家介紹的非常詳細,需要的朋友可以參考下

總結了一下八種bean的加載方式

1.XML方式聲明bean

不贅述了

2.使用@Component及其衍生注解@Controller 、@Service、@Repository定義bean

@Service
public class BookServiceImpl implements BookService { }

3.ApplicationContex的register方法

public class AppImport {
    
public static void main(String[] args) {
    
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(SpringConfig5.class);

ctx.register(Cat.class);

String[] names = ctx.getBeanDefinitionNames();

for (String name : names) {
System.out.println(name);
}
}
}

4.第三方bean加載方式

@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {
@Bean
public DruidDataSource getDataSource(){
DruidDataSource ds = new DruidDataSource();
return ds; 
}
 }

初始化實現(xiàn)FactoryBean接口的類,實現(xiàn)對bean加載到容器之前的批處理操作

@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {

@Bean
public DruidDataSource getDataSource(){
DruidDataSource ds = new DruidDataSource();
return ds; } 
}

public class SpringConfig8 {

@Bean
public BookFactoryBean book(){
return new BookFactoryBean();
}

}

5.使用@Import注解

解決無侵入式加載,降低耦合問題

@Import(Dog.class)
public class SpringConfig5 { } 被導入的bean無需使用注解聲明為bean
public class Dog { }

此形式可以有效的降低源代碼與Spring技術的耦合度,在spring技術底層及諸多框架的整合中大量使用

6.ImportSelector接口

在import的基礎上解決業(yè)務判斷問題

導入實現(xiàn)了ImportSelector接口的類,實現(xiàn)對導入源的編程式處理解決根據(jù)邏輯業(yè)務加載bean的問題

public class MyImportSelector implements ImportSelector {
public String[] selectImports(AnnotationMetadata metadata) {

boolean flag = metadata.hasAnnotation("org.springframework.context.annotation.Import");//判斷SpringConfig5的元數(shù)據(jù)有哪些特征。有沒有import注解


if(flag){
return new String[]{"com.itheima.domain.Dog"};
}
return new String[]{"com.itheima.domain.Cat"};
}

}
@Import(MyImportSelector.class)
public class SpringConfig5 { } 

7.ImportBeanDefinitionRegistrar接口

//在importselect基礎上達到覆蓋已有相同名稱bean的目的

導入實現(xiàn)了ImportBeanDefinitionRegistrar接口的類,通過BeanDefinition的注冊器注冊實名bean,實現(xiàn)對
容器中bean的裁定,例如對現(xiàn)有bean的覆蓋,進而達成不修改源代碼的情況下更換實現(xiàn)的效果。

public class MyRegistrar implements ImportBeanDefinitionRegistrar {
@Override    
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
BeanDefinitionRegistry registry) {

//AnnotationMetadata 同importselect方式判斷元數(shù)據(jù)

BeanDefinition beanDefinition = BeanDefinitionBuilder
.rootBeanDefinition(BookServiceImpl2.class) .getBeanDefinition();
registry.registerBeanDefinition("bookService", beanDefinition);
}
//

}
@Import(MyRegistrar.class)
public class SpringConfig6 { } 

8.BeanDefinitionRegistryPostProcessor接口

//在第七種的基礎上解決相同名稱bean過多,相互覆蓋。誰優(yōu)先級高的問題

導入實現(xiàn)了BeanDefinitionRegistryPostProcessor接口的類,通過BeanDefinition的注冊器注冊實名bean,
實現(xiàn)對容器中bean的最終裁定

public class MyPostProcessor implements BeanDefinitionRegistryPostProcessor {

@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
BeanDefinition beanDefinition = BeanDefinitionBuilder
.rootBeanDefinition(BookServiceImpl4.class) .getBeanDefinition();
registry.registerBeanDefinition("bookService", beanDefinition);
}

}
@Import({BookServiceImpl1.class, MyPostProcessor.class, MyRegistrar2.class, MyRegistrar.class})
public class SpringConfig8 {
}

如果BookServiceImpl1.class, MyPostProcessor.class, MyRegistrar.class, MyRegistrar.class中bean的名稱相同MyPostProcessor.class的優(yōu)先級最高

到此這篇關于springbean的八種加載方式的文章就介紹到這了,更多相關springbean加載方式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring?Boot?Jwts?Token生成方法示例

    Spring?Boot?Jwts?Token生成方法示例

    這篇文章主要為大家介紹了Spring?Boot?Jwts?Token生成方法示例,非適合java初學者,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Java數(shù)據(jù)結構中的HashMap和HashSet詳解

    Java數(shù)據(jù)結構中的HashMap和HashSet詳解

    HashMap和HashSet都是存儲在哈希桶之中,通過本文我們可以先了解一些哈希桶是什么,本文結合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2023-10-10
  • 解讀nextLine().split(“[\\s]“)的意思

    解讀nextLine().split(“[\\s]“)的意思

    這篇文章主要介紹了解讀nextLine().split(“[\\s]“)的意思,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java泛型之協(xié)變與逆變及extends與super選擇

    Java泛型之協(xié)變與逆變及extends與super選擇

    這篇文章主要介紹了Java泛型之協(xié)變與逆變及extends與super選擇,文章圍繞主題內容展開詳細內容介紹,需要的小伙伴可以參考一下
    2022-05-05
  • springboot中如何去整合shrio實例分享

    springboot中如何去整合shrio實例分享

    這篇文章主要介紹了springboot中如何去整合shrio實例分享的相關資料,需要的朋友可以參考下
    2023-08-08
  • 公司一般使用的分布式RPC框架及其原理面試

    公司一般使用的分布式RPC框架及其原理面試

    這篇文章主要為大家介紹了公司一般使用的分布式RPC框架及其原理的面試問題解答,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-03-03
  • 深入探究MyBatis插件機制靈活擴展及自定義增強框架能力

    深入探究MyBatis插件機制靈活擴展及自定義增強框架能力

    這篇文章主要介紹了深入探究MyBatis插件機制靈活擴展及自定義增強框架能力
    2024-01-01
  • SpringBoot項目使用內置的單機任務調度功能詳解

    SpringBoot項目使用內置的單機任務調度功能詳解

    這篇文章主要介紹了SpringBoot項目使用內置的單機任務調度功能詳解,SpringBoot框架中提供了2個注解來讓開發(fā)者快速配置來實現(xiàn)單機定時任務調度的功能,分別是@EnableScheduling和 @Scheduled,需要的朋友可以參考下
    2024-01-01
  • protobuf簡介及使用流程

    protobuf簡介及使用流程

    本文介紹了Protocol Buffers(protobuf)的數(shù)據(jù)結構序列化和反序列化框架,包括其特點、使用流程和快速上手,通過一個簡單的通訊錄示例,展示了如何創(chuàng)建.proto文件、添加注釋、編寫消息定義、編譯.proto文件以及進行序列化和反序列化操作,感興趣的朋友一起看看吧
    2025-02-02
  • 解決SpringBoot jar包中的文件讀取問題實現(xiàn)

    解決SpringBoot jar包中的文件讀取問題實現(xiàn)

    這篇文章主要介紹了解決SpringBoot jar包中的文件讀取問題實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08

最新評論

山东省| 衡阳市| 仁怀市| 昭通市| 安阳县| 尉犁县| 安庆市| 扎鲁特旗| 库伦旗| 项城市| 萨迦县| 于田县| 阿城市| 永丰县| 利辛县| 绿春县| 禄丰县| 洪湖市| 手游| 巴马| 龙泉市| 弋阳县| 尼玛县| 蒲城县| 天长市| 饶阳县| 茶陵县| 新源县| 松原市| 靖安县| 金阳县| 大厂| 大庆市| 西平县| 哈密市| 永济市| 富川| 南木林县| 邢台市| 昌黎县| 白银市|