關於spring的@resource註解的欄位注入和setter注入的區別
請問欄位注入的時候 1 @resource private IUserDao userDao; //請問如果我這樣寫了之後,是不是不用寫相對應的setter getter方法了? 2 private IUserDao userDao; @resource public void setter UserDao(UserDao userDao){ this.userDao=userDao; }; //請問如果換成這樣,和1有什麼區別的呢? 功能是否一樣? 假設功能一樣的話,明顯1好一點啊,因為就兩行,而2有5行之多。
[email protected]應用在欄位上,則注入規則是: a.先使用欄位名字匹配bean,查詢到bean則注入,如果型別不匹配則此時有異常,注入失敗。 b.如果欄位名字沒有匹配到Bean則spring會嘗試採用欄位型別匹配,如果找打bean則注入,如果欄位型別是介面則有可能會匹配到多個型別,則會丟擲匹配到多個bean的異常, 注入失敗。追問:[email protected]應用在setter上(應用到屬性),則注入規則是: a.先使用屬性名字匹配bean,查詢到bean則注入,如果型別不匹配則此時有異常,注入失敗。 b.如果屬性名字沒有匹配到Bean則spring會嘗試採用屬性引數型別匹配,如果找打bean則注入,如果屬性引數型別是介面則有可能會匹配到多個型別,則會丟擲匹配到多個bean的異常.注入失敗。 注意是屬性的引數型別,並不是屬性的型別,注意區別 3.小結 a.名稱------>b.型別或引數型別(屬性時). 參考:http://www.cnblogs.com/kuailewangzi1212/archive/2012/03/21/2410188.html
你複製也沒用,我就問你 兩個問題 1他們最終實現的功能是否一致,我並不想知道他們注入規則的區別,因為一般情況下,我們先保證我們在注入規則是完全正確的。 2 明顯1的程式碼量少於setter的程式碼量, 如果是我用,肯定次次都用1 欄位注入,為什麼要用@resource setter注入?追答:
就你的例子來說,第一種首先按照userDao名字來注入,然後按照IUserDao型別尋找注入;第二種首先也按名字注入,失敗後則按照引數型別注入,即UserDao型別注入。
你問的第二個問題,參考以下例子:
1234567891011121314151617 | //介面IUserDao public interface IUserDao; //介面實現1 public class UserDao1 implements IUserDao {...}; //介面實現2 public class UserDao2 implements IUserDao {...}; 1 、採用欄位名稱,則會注入失敗 @resource private IUserDao userDao; 2 、採用set方法注入,則可以注入UserDao1 @resource public void setUserDao(UserDao1 userDao) //注入UserDao2 @resource public void setUserDao(UserDao2 userDao) |
根據你的 A你的第一句話,若欄位注入,spring會去xml中找<bean id="userDao" class="某實現類"/>,找不到id就報錯,是把。 B第二句話,spring是先按照“名字”,名字來源是setUserDao中將首字母U改為u的那個“名字”userDao,對吧?追答:
你的A有點錯誤,按照欄位注入在按名字找不到的時候,會按照欄位型別查詢,在例子中則會找IUserDao型別,若找不到IUserDao型別則判斷是錯誤,或者找到多個也判定為錯誤。
例子中,bean的配置可能如下:
123 | <bean id= "userDao1" class = "UserDao1" /> <bean id= "userDao2" class = "UserDao2" /> //第一種查詢方式則會發現兩個IUserDao |
第二種則是先按名字查詢,找不到就按引數型別注入,查詢UserDao1 或者UserDao2 等。
相關推薦
關於spring的@resource註解的欄位注入和setter注入的區別
請問欄位注入的時候 1 @resource private IUserDao userDao; //請問如果我這樣寫了之後,是不是不用寫相對應的setter getter方法了? 2 private IUserDao userDao; @resource public v
Spring實現自動裝配(spring註解詳解)和手動注入比較
概述 註釋配置相對於 XML 配置具有很多的優勢: 它可以充分利用 Java 的反射機制獲取類結構資訊,這些資訊可以有效減少配置的工作。如使用 JPA 註釋配置 ORM 對映時,我們就不需要指定 PO 的屬性名、型別等資訊,如果關係表字段和 PO 屬性名、型別都一致,您
獲取Django model中的欄位名和欄位的verbose_name
定義模型: class Game(models.Model): name = models.CharField(u'遊戲名稱',max_length=30) gameid = models.CharField(u'遊戲id',max_length=20)
sql 欄位新增 和增加欄位備註 刪除備註
新增備註 /*oracle*/ comment on column 表名.列名 is '備註';/*mysql*/ ALTER TABLE 表名 MODIFY 欄位名 型別 COMMENT '備註'; 刪除表字段 alter table <表名> drop co
mysql欄位型別和查詢語句資料型別的關係
mysql欄位型別和查詢語句資料型別的關係 實驗 根據資料庫儲存的欄位型別和查詢語句中的資料型別列出下表: 資料庫 查詢語句 結果 string string ①
解決一個表中的資料由同表中兩欄位加權和得到(用觸發器解決)
本次實驗一張表中的90%的資料由相關連的外表(b表)資料得到,即用觸發器得到。 https://blog.csdn.net/IT_95/article/details/84064958 那麼如何實現這張表裡面的資料得到一個總的值放在一個欄位呢? 第一時間的想法是在這張表(b表)裡面加觸發
查詢資料庫中某表的欄位名和欄位型別
mysql: 1. 查詢資料庫中的所有表:show tables; 2. 查詢表中的欄位名和欄位型別: show columns from table_name(表名); &n
MYSQL資料庫 的 decimal 欄位型別 和 Java 的BigDecimal
mysql中的decimal , 在java中的用BigDecimal表示的。 decimal decimal(18,0) 18是定點精度,0是小數位數。 decimal(a,b) a指定指定小數點左邊和右邊可以儲存的十進位制數字的最大個數,最大精度38。 b指定
mysql欄位型別和基礎命令
欄位型別 日期和時間資料型別 MySQL資料型別 含義 date 3位元組,日期,格式:2014-09-18 time 3位元組,時間,格式:08:42:30 datetime 8位元組,日期時間,格式:2014-09-18 08:42:
java中利用stream求list集合中某個欄位的和
直接開始秀: 如果你的list是這種的: List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); 那麼就這麼求: IntSummaryStatistics stats = number
spring(一)控制反轉和依賴注入
控制反轉降低了類和類之間的耦合度,利於修改和擴充套件,提供了完整的IOC實現,讓我們專注於業務類和Dao類的設計,體現的是面向介面程式設計的思想,核心是BeanFactory。 需要引入的架包: commons-logging: spring執行依賴這個元件
Django2.0-db(3)-模型常用欄位, navie和aware時間
模型常用欄位 常用欄位 Django中,定義了一些Field來與資料庫表中的欄位型別來進行對映。 AutoField 對映到資料庫中的是int型別,可以有自動增長的特性。 如果不指定主鍵,模型會自動生
Hive:map欄位儲存和取用 ( str_to_map函式 )
str_to_map(字串引數, 分隔符1, 分隔符2) 使用兩個分隔符將文字拆分為鍵值對。 分隔符1將文字分成K-V對,分隔符2分割每個K-V對。對於分隔符1預設分隔符是 ',',對於分隔符2預設分隔符是 '='。 例子: 1. 建立map欄位 DROP TABLE IF E
Spring中註解@Transactional在oracl和mysql差異
嘿嘿 !從今天開始圖圖開始寫部落格啦 這是圖圖的第一個部落格 ,不足之處請大家指出,共同進步。 @Transactional是Spring中的事務註解,其引數為readOnly用於設定當前事務是否為只讀事務,設定為true表示只讀,false則表示可讀寫,如@Transactional(re
SQL中刪除單欄位重複和多個欄位重複的方法
--刪除OrderDetails表中materialscode欄位重複的行,只保留ID最小的一行資料 delete from OrderDetails where materialscode in (select materialscode from OrderDetails group by
記憶體分配與欄位 堆和棧 XIP(片上執行)
1 記憶體分配與欄位 程式編譯時,編譯器將程式碼翻譯成彙編程式碼,然後彙編器將彙編程式碼翻譯成機器程式碼(二進位制),得到目標檔案,最後連結器將目標檔案連結成可執行檔案。而目標檔案和可執行檔案的格式一般是類似的,由一個個se
mybatis解決實體類欄位名和表列名不一樣的問題
Book類有成員變數:bookName,price book表有列名:book_name,price 解決方法一:在BookMapper.xml檔案的sql語句中使用別名 例如: <select id="getAllBooks" resultType="Book">
SQLServer學習筆記 --- 如何獲取檢視 view 的欄位名和欄位型別
wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------
jmeter summary report 欄位意思和設定集合點解釋
1.需要在新增一個名為summary report的監聽器,跑完之後檢視 Label:取樣器/監聽器名稱 Samples :事務數量 Average:平均一個完成一個事務消耗的時間(平均響應時間) Median:所有響應時間的中間值,也就是 50%使用者的響應時間,大概是這
Sql使用SUM和UNION ALL 查詢兩張表中指定欄位的和
1、t_test1表 t_test2表 2、查詢需求:求t_test1.num與t_test2.amount之和 方法一: SELECT