欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring 方法注解@Bean及配置類掃描路徑

 更新時間:2024年12月23日 11:53:35   作者:三三是該溜子  
這篇文章主要介紹了Spring 方法注解@Bean及配置類掃描路徑,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧

引入

類注解是添加到某個類上的,但是存在兩個問題

1. 使?外部包?的類,沒辦法添加類注解

2. ?個類,需要多個對象,?如多個數據源

這種場景,我們就需要使??法注解 @Bean

一:@Bean方法注解

1:方法注解要搭配類注解使用

@Component
public class BeanConfig {
    @Bean
    public User user() {
        User user = new User();
        user.setName("zhangsan");
        user.setAge(18);
        return user;
    }
}
@SpringBootApplication
public class SpringIocDemoApplication {
    public static void main(String[] args) {
        // 獲取Spring上下?對象
        ApplicationContext context = SpringApplication.run(SpringIocDemoApplication.class, args);
        // 從Spring上下?中獲取對象
        User user = context.getBean(User.class);
        // 使?對象
        System.out.println(user);
    }
}

2:執(zhí)行結果

如果不搭配類注解使用,Spring會報錯沒有找到這樣一個Bean對象

二:如何定義多個對象

我們試想一下,如果一個類中,有多個方法都被@Bean注解修飾了,那么Spring在調用的時候怎么區(qū)分,我們需要調用的是哪個方法呢,比如上面的舉例,有user1方法,user2方法

1:代碼示例及運行結果

main方法沿用上述的

@Component
public class BeanConfig {
    @Bean
    public User user1() {
        User user = new User();
        user.setName("zhangsan");
        user.setAge(18);
        return user;
    }
    @Bean
    public User user2() {
        User user = new User();
        user.setName("lisi");
        user.setAge(19);
        return user;
    }
}

 報錯信息顯?:期望只有?個匹配,結果發(fā)現了兩個,user1,user2
從報錯信息中,可以看出來,@Bean注解的bean,bean的名稱就是它的?法名

2:根據名稱獲取bean對象

@SpringBootApplication
public class SpringIocDemoApplication {
    public static void main(String[] args) {
        // 獲取Spring上下?對象
        ApplicationContext context = SpringApplication.run(SpringIocDemoApplication.class, args);
        // 根據bean名稱, 從Spring上下?中獲取對象
        User user1 = (User) context.getBean("user1");
        User user2 = (User) context.getBean("user2");
        System.out.println(user1);
        System.out.println(user2);
    }
}

3:重命名Bean

通過設置name屬性給Bean對象進?重命名操作,掃描線程類SpringIocDemoApplication代碼此處省略(可參考上面)

(1)代碼示例

@Bean(name = {"u1","user1"})
public User user1(){
    User user = new User();
    user.setName("zhangsan");
    user.setAge(18);
    return user;
}   

(2)注意點

name={}可以省略,只有?個名稱時,{}也可以省略

三:掃描路徑

思考:如果對象很多,我們實際用到的對象很少,那么Spring全都掃描一遍是不是非常浪費資源,那么掃描線程類SpringIocDemoApplication的掃描范圍是如何規(guī)定的呢?

1:移動掃描線程類

我們把掃描線程類放到controller包路徑下,在運行代碼試試

@SpringBootApplication
public class SpringIocDemoApplication {
    public static void main(String[] args) {
        // 獲取Spring上下?對象
        ApplicationContext context = SpringApplication.run(SpringIocDemoApplication.class, args);
        // 從Spring上下?中獲取對象
        User u1 = (User) context.getBean("u1");
        // 使?對象
        System.out.println(u1);
    }
}

 2:運行結果

解釋:沒有bean的名稱為u1,因為掃描線程類此時處于controller包下,那么默認只掃描controller包路徑下的類,所以沒有被掃描到的類,當然就拿不到bean對象了。

3:配置掃描路徑@ComponentScan({})

@ComponentScan({"com.example.demo"})

在掃描線程類上加上注解@ComponentScan({"com.example.demo"}),就可以了

(1)注意點

{}?可以配置多個包路徑,但是實際應用并不做推薦

(2)默認掃描范圍

思考:為什么前?沒有配置@ComponentScan注解也可以呢?

@ComponentScan 注解雖然沒有顯式配置,但是實際上已經包含在了啟動類聲明注解@SpringBootApplication 中了,默認掃描的范圍是SpringBoot啟動類所在包及其?包

(3)推薦做法

把啟動類放在我們希望掃描的包的路徑下,這樣我們定義的bean就都可以被掃描到

到此這篇關于Spring 方法注解@Bean及配置類掃描路徑的文章就介紹到這了,更多相關Spring 注解@Bean內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java超詳細大文件分片上傳代碼

    Java超詳細大文件分片上傳代碼

    文件上傳是一個很常見的功能。在項目開發(fā)過程中,我們通常都會使用一些成熟的上傳組件來實現對應的功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2022-06-06
  • JAVA自定義注解詳情

    JAVA自定義注解詳情

    這篇文章主要介紹了Java自定義注解,結合實例形式總結分析了java常見的自定義注解類型、功能、用法及操作注意事項,需要的朋友可以參考下
    2021-10-10
  • SpringMvc自動裝箱及GET請求參數原理解析

    SpringMvc自動裝箱及GET請求參數原理解析

    這篇文章主要介紹了SpringMvc自動裝箱及GET請求參數原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • java編碼IDEA主題推薦

    java編碼IDEA主題推薦

    在這篇文章中,我精選了幾個比較是和?Java?編碼的?IDEA?主題供小伙伴們選擇。另外,我自己用的是?One?Dark?theme?這款,有需要的朋友可以借鑒參考下,希望大家喜歡
    2022-01-01
  • Spring?Security如何為用戶示例添加角色詳解

    Spring?Security如何為用戶示例添加角色詳解

    目前我正在用Java開發(fā)一個基于Spring Boot的web應用程序,下面這篇文章主要給大家介紹了關于Spring?Security如何為用戶示例添加角色的相關資料,需要的朋友可以參考下
    2022-10-10
  • Java多線程父線程向子線程傳值問題及解決

    Java多線程父線程向子線程傳值問題及解決

    文章總結了5種解決父子之間數據傳遞困擾的解決方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDecorator、ExecutorConfig、RequestContextHolder+TaskDecorator、MDC+TaskDecorator和InheritableThreadLocal
    2025-02-02
  • idea out目錄與target目錄的區(qū)別詳解

    idea out目錄與target目錄的區(qū)別詳解

    這篇文章主要介紹了idea out目錄與target目錄的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • ReentrantLock從源碼解析Java多線程同步學習

    ReentrantLock從源碼解析Java多線程同步學習

    這篇文章主要為大家介紹了ReentrantLock從源碼解析Java多線程同步學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Spring Bean的屬性注入方式

    Spring Bean的屬性注入方式

    這篇文章主要介紹了Spring Bean的屬性注入方式的相關資料,需要的朋友可以參考下
    2018-02-02
  • JVM雙親委派模型知識詳細總結

    JVM雙親委派模型知識詳細總結

    今天帶各位小伙伴學習Java虛擬機的相關知識,文中對JVM雙親委派模型作了非常詳細的介紹,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05

最新評論