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

Spring框架學(xué)習(xí)筆記之方法注解@Bean的使用

 更新時(shí)間:2023年12月06日 09:06:29   作者:小浪學(xué)編程  
這篇文章主要給大家介紹了關(guān)于Spring框架學(xué)習(xí)筆記之方法注解@Bean使用的相關(guān)資料,這是一個(gè)我們很常用的注解,作用是指示一個(gè)方法生成一個(gè)由Spring管理的Bean,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、如何使用方法注解

??1、前面介紹過(guò),類(lèi)注解是寫(xiě)到類(lèi)上面的,那么方法注解是寫(xiě)到對(duì)應(yīng)的方法上的;

    @Bean(name = "user1") 
    public User getUser1() {
        User user = new User();
        user.setId(1);
        user.setName("張三");
        return user;
    }

2、方法注解的話是不能夠單獨(dú)使用的,如果我們只給一個(gè)方法注解@Bean的話,看是否能運(yùn)行;

 ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
 User user = context.getBean(User.class);//只使用類(lèi)屬性
 System.out.println(user);

運(yùn)行結(jié)果:

6b10299ea7a04d3a9d1dc8ced9646992.png

如何解決?我們只需要在方法注解的類(lèi)中添加一個(gè)類(lèi)注解即可;

887ef81e144847ccb2e749d6c50baa23.png

再次運(yùn)行:

91c3018dc0df43f8972d1b31be2ca865.png

注意Bean 的命名規(guī)則,當(dāng)沒(méi)有設(shè)置 name 屬性時(shí),那么 bean 默認(rèn)的名稱(chēng)就是方法名,當(dāng)設(shè)置了 name 屬性之后,只能通過(guò)重命名的 name 屬性對(duì)應(yīng)的值來(lái)獲取,也就是說(shuō)重命名之后,再使用方法名就獲取不到 bean 對(duì)象;

比如已經(jīng)給bean重命名了,我們?cè)趩?dòng)類(lèi)App中通過(guò)方法名來(lái)獲取Bean對(duì)象;

7f7bcc809f0945e3981d10756c22c023.png

看運(yùn)行結(jié)果:

2f5341d04adf49ed87b55fa725772cda.png

二、同一類(lèi)型的對(duì)象注入多次的問(wèn)題

1、在UserBeans類(lèi)中寫(xiě)兩個(gè)對(duì)象注解;

@Component
public class UserBeans {
    @Bean(name = "user1") // 【注意事項(xiàng):只使用一個(gè) @Bean 是無(wú)法將對(duì)象存儲(chǔ)到容器中的】
    public User getUser1() {
        User user = new User();
        user.setId(1);
        user.setName("張三");
        return user;
    }
 
    @Bean(name = "user2") // 【注意事項(xiàng):只使用一個(gè) @Bean 是無(wú)法將對(duì)象存儲(chǔ)到容器中的】
    public User getUser2() {
        User user = new User();
        user.setId(2);
        user.setName("李四");
        return user;
    }

2、通過(guò)啟動(dòng)類(lèi)來(lái)獲取對(duì)象;

ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
User user = context.getBean(User.class);//只使用類(lèi)屬性
System.out.println(user);

運(yùn)行結(jié)果:

9d11f93964b14f7496cad85c3d4aaac9.png

翻譯過(guò)來(lái)的意思就是:沒(méi)有可用的“com.User”類(lèi)型的合格bean:應(yīng)為單個(gè)匹配bean,但找到2:user1,user2;

那么,如何解決呢?這里我們提供了三種解決方案;

1、精準(zhǔn)的描述bean的名稱(chēng)(將注入的名稱(chēng)寫(xiě)對(duì))

比如我們?cè)趩?dòng)類(lèi)中使用id+class的形式來(lái)取對(duì)象;

ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
User user = context.getBean("user1",User.class);//只使用類(lèi)屬性
System.out.println(user);

運(yùn)行結(jié)果:沒(méi)有問(wèn)題;

a95764c8b2994e24b7719b05c6a2a250.png

2、使用@Resource設(shè)置name的方式來(lái)重命名注入的對(duì)象;

1、這里我們通過(guò)UserController類(lèi)來(lái)進(jìn)行演示;注意我們添加的注解@Resource,下面新寫(xiě)了一個(gè)對(duì)象user1;

package com;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
 
import javax.annotation.Resource;
 
@Controller
public class UserController {
    @Resource
    private User user1;
    public void sayHi(){
        System.out.println("User"+user1);
    }
}

啟動(dòng)類(lèi)App中代碼:

ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
UserController userController = context.getBean(UserController.class);
userController.sayHi();

運(yùn)行結(jié)果:

c3427d0324524f45a5b33326909721b0.png

3、使用@AutoWired+@Qualifier來(lái)篩選bean對(duì)象;

UserController代碼:

package com;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
 
import javax.annotation.Resource;
 
@Controller
public class UserController {
    @Autowired
    @Qualifier(value = "user2")
    private User user2;
    public void sayHi(){
        System.out.println("User"+user2);
    }
}

運(yùn)行結(jié)果:

7dfeb12369de4c22a18d8fa934dc987a.png

對(duì)象注入的三種方法

1、屬性注入

屬性注?是使? @Autowired 實(shí)現(xiàn)的,將 Service 類(lèi)注?到 Controller 類(lèi)中。

package com;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import javax.annotation.Resource;
/**
 * 根據(jù)屬性實(shí)現(xiàn) bean 對(duì)象的注入
 */
@Controller
public class UserController2 {
    // 對(duì)象注入方式1:屬性注入
    @Autowired
    private UserService userService;
    public void sayHi() {
        userService.sayHi();
    }
 
}

啟動(dòng)類(lèi)App:

ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
UserController2 userController2 = context.getBean(UserController2.class);
userController2.sayHi();

運(yùn)行結(jié)果:

9e0802c7718e4f1890216f6f47e8e847.png

2、構(gòu)造方法注入

package com;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
 
/**
 * 使用構(gòu)造方法實(shí)現(xiàn) bean 注入
 */
@Controller
public class UserController3 {
 
    private UserService userService;
 
    // 構(gòu)造方法注入(官?gòu)V推薦寫(xiě)法)
    @Autowired
    public UserController3(UserService userService) {
//        userService = new UserService(); // 傳統(tǒng)的寫(xiě)法
        this.userService = userService;
    }
    
    public void sayHi() {
        userService.sayHi();
    }
 
}

注:如果當(dāng)前類(lèi)只存在一個(gè)構(gòu)造方法,那么@Autowired注解可以省略;

啟動(dòng)類(lèi)App:

ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
UserController3 userController3 = context.getBean(UserController3.class);
userController3.sayHi();

運(yùn)行結(jié)果:

2c933cecf82e437c9f62bbdfb0d0a68b.png

3、Setter方法注入

package com;
 
import org.springframework.stereotype.Controller;
 
import javax.annotation.Resource;
 
/**
 * 使用 Setter 實(shí)現(xiàn) bean 注入
 */
@Controller
public class UserController4 {
 
    private UserService userService;
 
    @Resource
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
 
    public void sayHi() {
        userService.sayHi();
    }
}

啟動(dòng)類(lèi)App:

ApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
UserController4 userController4 = context.getBean(UserController4.class);
userController4.sayHi();

運(yùn)行結(jié)果:

36282f832a3b4bfa8814fb3273fce9be.png

屬性注入和構(gòu)造方法注入以及 Setter 注入的區(qū)別是什么?

??1、屬性注入:特點(diǎn)寫(xiě)法簡(jiǎn)單。但是通用性不好,它只能運(yùn)行在 IoC 容器下,如果是非 IOC 容器就會(huì)出現(xiàn)問(wèn)題。

??2、Setter 注入:早期 Spring 版本推薦的寫(xiě)法,Setter 注入通用性沒(méi)有構(gòu)造方法注入通用。

??3、構(gòu)造方法注入: 通用性更好、它能確保在使用注入對(duì)象之前,此注入對(duì)象一定初始化過(guò)了。當(dāng)構(gòu)造方法注入?yún)?shù)過(guò)多時(shí),此時(shí)開(kāi)發(fā)者就要檢查自己所寫(xiě)的代碼是否符合單一設(shè)計(jì)原則的規(guī)范了,此注入方式也是 spring后期版本中推薦的注入方式。

注意:@Resource注解只支持屬性注入和Setter注入,不支持構(gòu)造方法注入;

@Resource VS @Autowired?

??出身不同: @Resource 來(lái)著與 JDK (Java 親兒子) ,@Autowired 是 Spring 框架提供的。

??2、用法不同: @Autowired 支持屬性注入、構(gòu)造方法注入和 Setter 注入,而 @Resource 不支持構(gòu)造方法注入。

??3、支持的參數(shù)不同: @Resource 支持更多的參數(shù)設(shè)置,比如 name、type 設(shè)置;@Autowired 只支持required 參數(shù)設(shè)置。

總結(jié)

到此這篇關(guān)于Spring框架學(xué)習(xí)筆記之方法注解@Bean的使用的文章就介紹到這了,更多相關(guān)Spring方法注解@Bean使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Java日期工具類(lèi)的編寫(xiě)

    關(guān)于Java日期工具類(lèi)的編寫(xiě)

    這篇文章主要介紹了關(guān)于Java日期工具類(lèi)的編寫(xiě),在Java開(kāi)發(fā)中,經(jīng)常會(huì)遇到處理日期相關(guān)的數(shù)據(jù),那么今天我們來(lái)自己寫(xiě)一個(gè)工具類(lèi),文中有詳細(xì)的實(shí)例代碼以及實(shí)現(xiàn)思路,需要的朋友可以參考下
    2023-05-05
  • 減小Maven項(xiàng)目生成的JAR包體積實(shí)現(xiàn)提升運(yùn)維效率

    減小Maven項(xiàng)目生成的JAR包體積實(shí)現(xiàn)提升運(yùn)維效率

    在Maven構(gòu)建Java項(xiàng)目過(guò)程中,減小JAR包體積可通過(guò)排除不必要的依賴(lài)和使依賴(lài)jar包獨(dú)立于應(yīng)用jar包來(lái)實(shí)現(xiàn),在pom.xml文件中使用<exclusions>標(biāo)簽排除不需要的依賴(lài),有助于顯著降低JAR包大小,此外,將依賴(lài)打包到應(yīng)用外,可減少應(yīng)用包的體積
    2024-10-10
  • SSM框架下如何實(shí)現(xiàn)數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái)

    SSM框架下如何實(shí)現(xiàn)數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái)

    這篇文章主要介紹了SSM框架下如何實(shí)現(xiàn)數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • SpringBoot+Dubbo+Zookeeper知識(shí)整合過(guò)程詳解

    SpringBoot+Dubbo+Zookeeper知識(shí)整合過(guò)程詳解

    本文首先介紹了分布式系統(tǒng)的基本概念和分類(lèi),包括單一應(yīng)用架構(gòu)、垂直應(yīng)用架構(gòu)、分布式服務(wù)架構(gòu)和流動(dòng)計(jì)算架構(gòu),通過(guò)一個(gè)完整的Spring Boot + Dubbo + Zookeeper框架搭建示例,展示了如何將這些技術(shù)整合到一個(gè)實(shí)際的項(xiàng)目中,感興趣的朋友一起看看吧
    2025-02-02
  • IntelliJ IDEA 2021 Tomcat 8啟動(dòng)亂碼問(wèn)題的解決步驟

    IntelliJ IDEA 2021 Tomcat 8啟動(dòng)亂碼問(wèn)題的解決步驟

    很多朋友遇到過(guò)IntelliJ IDEA 2021 Tomcat 8啟動(dòng)的時(shí)候出現(xiàn)各種奇葩問(wèn)題,最近有童鞋反映IntelliJ IDEA 2021 Tomcat 8啟動(dòng)亂碼,正好我也遇到這個(gè)問(wèn)題,下面我把解決方法分享給大家需要的朋友參考下吧
    2021-06-06
  • Java使用toString方法展示枚舉字段信息

    Java使用toString方法展示枚舉字段信息

    這篇文章主要為大家詳細(xì)介紹了如何在Java中通過(guò)重寫(xiě)枚舉的toString方法來(lái)展示枚舉實(shí)例的字段信息,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • IntelliJ IDEA配置Gitee私人令牌的完整指南(2025 年最新版)

    IntelliJ IDEA配置Gitee私人令牌的完整指南(2025 年最新版)

    隨著代碼安全意識(shí)的提升,Gitee已全面棄用明文密碼進(jìn)行 Git操作,轉(zhuǎn)而強(qiáng)制使用 私人令牌,進(jìn)行身份認(rèn)證,對(duì)于使用IntelliJ IDEA的開(kāi)發(fā)者而言,正確配置Gitee賬號(hào)與令牌,是實(shí)現(xiàn)代碼推送、拉取、同步等操作的前提,所以本文介紹了IntelliJ IDEA配置Gitee私人令牌的完整指南
    2025-10-10
  • Java中==與equals()的用法及區(qū)別總結(jié)

    Java中==與equals()的用法及區(qū)別總結(jié)

    在Java編程中==運(yùn)算符和equals方法是常用來(lái)比較對(duì)象或基本數(shù)據(jù)類(lèi)型的重要工具,這篇文章主要介紹了Java中==與equals()的用法及區(qū)別總結(jié)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-05-05
  • java開(kāi)發(fā)分布式服務(wù)框架Dubbo暴露服務(wù)過(guò)程詳解

    java開(kāi)發(fā)分布式服務(wù)框架Dubbo暴露服務(wù)過(guò)程詳解

    這篇文章主要為大家介紹了java開(kāi)發(fā)分布式服務(wù)框架Dubbo暴露服務(wù)的過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • SpringBoot整合EasyExcel實(shí)現(xiàn)Excel表格導(dǎo)出功能

    SpringBoot整合EasyExcel實(shí)現(xiàn)Excel表格導(dǎo)出功能

    這篇文章主要介紹了SpringBoot整合EasyExcel實(shí)現(xiàn)Excel表格導(dǎo)出功能,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07

最新評(píng)論

花莲县| 峡江县| 仁寿县| 固原市| 类乌齐县| 大名县| 鹤山市| 巴林右旗| 霍城县| 武义县| 本溪| 金湖县| 饶平县| 资兴市| 佛坪县| 遵义市| 西乡县| 高要市| 万源市| 阳山县| 微山县| 威海市| 广灵县| 普洱| 贵南县| 娱乐| 玛沁县| 弋阳县| 浦江县| 论坛| 洛浦县| 石首市| 鄂托克旗| 华池县| 滨州市| 通化县| 雷州市| 康乐县| 临海市| 巴青县| 宿迁市|