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

聊聊@Autowired注解注入,寫接口名字還是實現(xiàn)類的名字

 更新時間:2021年11月18日 10:38:01   作者:Thinkingcao  
這篇文章主要介紹了聊聊@Autowired注解注入,寫接口名字還是實現(xiàn)類的名字,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

用@Autowired注解注入,寫接口名字還是實現(xiàn)類的名字

來自某程序員一個問答問題

1. 有一點沒明白,為什么注解@repository注解的是接口UserDAO的實現(xiàn)類UserDAOImpl,而在UserServiceImpl中使用@Autowired注解注入屬性private UserDAO userDAO自動裝配,為什么最后得到的是UserDAOImpl的實例。

-----上面是某位同學(xué)的提問,我也有這樣的疑問----

2. @Service注解服務(wù)層的時候,在unitest中,是從ApplicationContext.getBean("實現(xiàn)類名字,首字母小寫") 這樣獲取的。

也就是說,在容器中初始化的Bean應(yīng)該按照實現(xiàn)類名字規(guī)則。 這一點如果是用xml配置是不存在這樣的問題,因為xml可以指定id, id 是接口,class指向?qū)崿F(xiàn)類。

3. 來自網(wǎng)友的回答:這個其實是創(chuàng)建了實現(xiàn)類的對象但引用了接口類型,即"InjectionDao injectionDao = new InjectionDaoImpl()", 這個其實是Java多態(tài)性(向上轉(zhuǎn)型)的一種應(yīng)用。在實現(xiàn)類處加@Repository注解,意思就是new InjectionDaoImpl(), 而在InjectionServiceImpl中定義屬性InjectionDAO injectionDAO就是將new出來的這個InjectionDaoImpl對象向上轉(zhuǎn)型為InjectionDao類型。

Spring中Autowired注入接口的幾個問題

1.Spring怎么知道注入哪個實現(xiàn)?

As long as there is only a single implementation of the interface and that implementation is annotated with @Component with Spring's component scan enabled, Spring framework can find out the (interface, implementation) pair.

If component scan is not enabled, then you have to define the bean explicitly in your application-config.xml (or equivalent spring configuration file).

如果Spring配置了component scan,并且要注入的接口只有一個實現(xiàn)的話,那么spring框架可以自動將interface于實現(xiàn)組裝起來。如果沒有配置component scan,那么你必須在application-config.xml(或等同的配置文件)定義這個bean。

可以理解為 在 application-service.xml 配置文件中聲明了 component-scan

<context:component-scan base-package="com.system.service.impl"/>

在 com.system.service 下有一個接口類,在 com.system.service.impl 下有一個接口對應(yīng)的實現(xiàn)類,且該實現(xiàn)類用 @Service 注解進(jìn)行了標(biāo)注。

在使用該接口類的時候,可以按照如下方式:

@Autowired
private UserloginService userloginService;

以此來進(jìn)行自動裝配。

2.需要@Qualifier和@Resource注解嗎?

Once you have more than one implementation, then you need to qualify each of them and during auto-wiring, you would need to use the @Qualifier annotation to inject the right implementation, along with @Autowired annotation.

If you are using @Resource (J2EE semantics), then you should specify the bean name using the name attribute of this annotation.

一旦一個接口有多個實現(xiàn),那么就需要每個特殊化識別并且在自動裝載過程中使用@Qualifier和@Autowired一起使用來標(biāo)明。如果是使用@Resource注解,那么你應(yīng)該使用resource中屬性名稱來標(biāo)注@Autowired.

3.為什么@Autowired使用在interface上而不是實現(xiàn)類上?

Firstly, it is always a good practice to code to interfaces in general.

Secondly, in case of spring, you can inject any implementation at runtime.

A typical use case is to inject mock implementation during testing stage.

首先,一般使用接口是很常用并且有益的變成技術(shù)。

其次,在spring中,你可以在運(yùn)行過程中注入各種實現(xiàn)。一個很經(jīng)典的情況就是在測試階段,注入模擬的實現(xiàn)類。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringSecurity中@PermitAll與@PreAuthorize的實現(xiàn)

    SpringSecurity中@PermitAll與@PreAuthorize的實現(xiàn)

    @PermitAll和@PreAuthorize都是處理安全性的強(qiáng)大工具,本文主要介紹了SpringSecurity中@PermitAll與@PreAuthorize的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • springboot實現(xiàn)文件上傳步驟解析

    springboot實現(xiàn)文件上傳步驟解析

    這篇文章主要介紹了springboot實現(xiàn)文件上傳步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • SpringMVC+Mybatis實現(xiàn)的Mysql分頁數(shù)據(jù)查詢的示例

    SpringMVC+Mybatis實現(xiàn)的Mysql分頁數(shù)據(jù)查詢的示例

    本篇文章主要介紹了SpringMVC+Mybatis實現(xiàn)的Mysql分頁數(shù)據(jù)查詢的示例,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • SpringBoot多配置切換的配置方法

    SpringBoot多配置切換的配置方法

    這篇文章主要介紹了SpringBoot多配置切換的配置方法及spring boot設(shè)置端口和上下文路徑的方法,需要的朋友可以參考下
    2018-04-04
  • Java中使用Filter過濾器的方法

    Java中使用Filter過濾器的方法

    Filter過濾器是javaWeb層面的,它跟Servlet類似,每次前端請求,首先進(jìn)入的是過濾器,我們必須實現(xiàn)Filter接口,重寫三個方法,才能使用Filter過濾器,需要的朋友可以參考下
    2021-06-06
  • JAVA利用遞歸刪除文件代碼實例

    JAVA利用遞歸刪除文件代碼實例

    這篇文章主要介紹了JAVA利用遞歸刪除文件代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • IDEA中配置多個版本的JDK的實現(xiàn)示例

    IDEA中配置多個版本的JDK的實現(xiàn)示例

    IDEA可以配置多個JDK,根據(jù)需要使用不同版本的,本文就來介紹一下IDEA中配置多個版本的JDK的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 解決mybatis #{}無法自動添加引號的錯誤

    解決mybatis #{}無法自動添加引號的錯誤

    這篇文章主要介紹了解決mybatis #{}無法自動添加引號的錯誤,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 解析idea內(nèi)嵌瀏覽器翻譯

    解析idea內(nèi)嵌瀏覽器翻譯

    這篇文章主要介紹了解析idea內(nèi)嵌瀏覽器翻譯的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • java對象序列化與反序列化的默認(rèn)格式和json格式使用示例

    java對象序列化與反序列化的默認(rèn)格式和json格式使用示例

    這篇文章主要介紹了java對象序列化與反序列化的默認(rèn)格式和json格式使用示例,需要的朋友可以參考下
    2014-02-02

最新評論

南乐县| 镇坪县| 绥江县| 安康市| 伊宁县| 象山县| 云南省| 临江市| 泗阳县| 成都市| 岳阳县| 荔波县| 清镇市| 贵州省| 新宁县| 邹平县| 商丘市| 海门市| 盖州市| 大名县| 玉屏| 迁西县| 玛多县| 高雄县| 广安市| 西华县| 佳木斯市| 隆回县| 讷河市| 日喀则市| 德令哈市| 雷波县| 瑞安市| 周至县| 辽源市| 杂多县| 宿松县| 武功县| 常州市| 师宗县| 南通市|