######Spring第5天ssh整合(註解版)難理解知識點:【自定義 方法加註解的方式】給dao注入sessionFactory屬性+【搞清@Autowared和@Resource含義】
===【方法加註解的方式】給dao注入sessionFactory屬性(繼承父類的屬性),第一次見!===具體怎麼用的,看原始碼。(後面有寫)
以前都是屬性+註解注入屬性。
[email protected]和@Resource到底是幹嘛的?
剛學IOC時可能能夠立馬說出,是
IOC註解方式:引入外部物件的,維護物件間依賴關係的。
===ps:IOC xml方式 是在<bean>的property屬性裡設定另一個bean作為屬性。bean間依賴。通過屬性注入。===直觀簡單易懂。
但是使用IOC註解方式,也只不過是:
把<bean>配置刪掉,換成類上的 @Component、@Repository、@Service、@Controller,
再在上一層類中(比如service注入dao物件 service是上一層物件) 宣告一個被注入類的物件屬性,並且加上@Autowared或@Resource註解即可。
IOC註解方式就是這麼簡單。
===但是 當時沒有深入思考,並多加練習。理解不深刻。導致現在很容易就忘了。
不像 IOC xml方式簡單明瞭,想忘都忘不了!就是屬性注入。
===小結①:
①【屬性注入就是IOC,IOC就是屬性注入】。
②不管直觀的xml方式,還是有點抽象的註解方式。
===【屬性注入本質】都是兩步:【①建立物件,②呼叫一個物件的set方法 注入 另一個物件】
===小結②:IOC註解方式:
①建立物件,
===就是:(對【應屬性注入的本質工作】第一步)
在我們需要在spring xml配置裡寫<bean>的類上 加上: @Component、@Repository、@Service、@Controller,
//===註解不帶任何屬性,bean名稱預設是類名首字母小寫。
===###==service、dao只需要是單例,spring預設建立物件也是單例。所以不用配置屬性。
===###==service在注入dao時,使用:@Autowared就行:通過型別自動匹配。不需要加任何註解屬性。
②呼叫一個物件的set方法 注入 另一個物件,
===就是:(對【應屬性注入的本質工作】第二步)
案例: service宣告一個dao類的物件(被注入物件)屬性,並且在屬性上加註解:加上@Autowared或@Resource註解即可。
@Autowared 最好用。
@Resource最好寫上註解屬性name="bean ID"。===不寫屬性,預設的匹配規則不清楚。一般不這樣用。
======前面可能看起來還很簡單。
service注入dao經典,爛熟,很簡單。
但是使用jdbc:dao注入 dataSource屬性(C3p0、dbcp等資料庫),jdbcTemplate屬性,熟練使用【IOC 註解方式 注入屬性】,也還好。。
後面遇到SSH整合時,
使用dao注入sessionFactory: 這就有點暈了。是很暈。
原因總結如下:
①spring配置檔案裡,有一個sessionFactory,但不是org.hibernate.SessionFactory。
<!-- sessionFactory :整合hibernate方式2:在spring中配置hibernate屬性 -->
<bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" >
②重頭戲來了:dao注入sessionFactory:第一眼我絕對看不懂。
後來對比jdbc 方式:繼承JdbcDaoSupport,總結了一下:
要注入sessionFactory(jdbc裡是DataSOurce),首先要知道:
①sessionFactory是spring給我們建立的。===jdbc的DataSource也是。
//===【HibernateDaoSupport的getHibernateTemplate()原始碼】:
//因為現在HibernateTemplate肯定是null,所以會呼叫HibernateDaoSupport的createHibernateTemplate();
//createHibernateTemplate(sessionFactory)原始碼:呼叫new HibernateTemplate(sessionFactory);
//HibernateTemplate構造方法會呼叫setSessionFactory(sessionFactory)。
//===總之HibernateTemplate的setSessionFactory(sessionFactory),引數是傳過來的 HibernateDaoSupport的sessionFactory屬性。
//===也就是dao的父類的sessionFactory屬性。
②getHibernateTemplate()建立hibernateTemplate物件時,內部將SessionFactory注入到了hibernateTemplate。
dao注入SessionFactory就是傳 給HibernateTemplate用的,用來建立hibernateTemplate。
雖然getHibernateTemplate()無引數,spring底層可能是用建構函式傳入SessionFactory屬性的方式 接收到當前專案的SessionFactory的。不用管。
===總之:######【dao要注入sessionFactory,就是在dao類裡 呼叫父類的setSessionFactory(SessionFactory sf)方法即可。(已測)】
######因為:因為【只有父類HibernateDaoSupport(API)的setSessionFactory(sessionFactory)《才能成功注入》spring自動為我們建立的sessionFactory】。
====最終還是因為 【sessionFactory物件是:spring自動為我們建立。】
自定義屬性,無法注入(匹配到)spring建立的sessionFactory。
所以我們不能自己在dao寫一個沒有呼叫父類setSessionFactory(sessionFactory)的 setSessionFactory(sessionFactory)方法。
==######=下面是測試案例,隨意一個 加了@Autowired的方法,lalala(sessionFactory),
只要呼叫了super. setSessionFactory(sessionFactory)。
執行都ok
圖片二:
=====通過以上學習總結:
spring的IOC(就是屬性注入),並不是那麼簡單的。還要多留心。
====終極問題結論:【@Autowared和@Resource只是注入屬性】,只相當於set方法,【###不能建立物件】。
###spring再牛,也不能單憑一個屬性名就能建立物件。
相關推薦
######Spring第5天ssh整合(註解版)難理解知識點:【自定義 方法加註解的方式】給dao注入sessionFactory屬性+【搞清@Autowared和@Resource含義】
===【方法加註解的方式】給dao注入sessionFactory屬性(繼承父類的屬性),第一次見!===具體怎麼用的,看原始碼。(後面有寫) 以前都是屬性+註解注入屬性。 [email protected]和@Resource到底是幹嘛的? 剛學IOC時可能能
Spring第四天:SSH框架整合、HibernateTemplate的使用、OpenSessionInViewFilter的使用
目錄 1.SSH整合方式一:無障礙整合 1.1SSH框架整合開發回顧 1.2SSH整合 1.2.1第一步:建立web專案,引入jar包 1.2.2第二步:引入配置檔案 1.2.3第三步:建立包結構 1.2.4第四步:建立相關類 1.2.5第五步:引入相關的頁面
Spring的第三天AOP之xml版
Spring的第三天AOP之xml版 ssm框架 spring AOP介紹 AOP(Aspect Oriented Programming),面向切面程式設計。它出來的目的並不是去取代oop
Spring第三天:Spring的AOP的註解開發、Spring的宣告式事務、JdbcTemplate
目錄 1.Spring的AOP基於AspectJ的註解開發 1.1Spring基於ApsectJ的註解的AOP開發 1.1.1建立專案,引入jar包 1.1.2引入配置檔案 1.1.3編寫目標類並配置 1.1.4編寫切面類並配置 1.1.5使用註解的AOP物件目標類進
Spring第三天:Spring的AOP的註解開發、Spring的聲明式事務、JdbcTemplate。
spec template ntc 整合 roman 清晰 定義 method 延伸 1.1 上次課內容回顧 l Spring的IOC的註解開發 n 註解的入門 u 引入aop的包 u 引入context約束 l <context:com
python函數第5天(day 24)
eat style python 通過 返回 for end 位置 sta 可叠代的:對象下有__iter__方法的都是可叠代的對象 叠代器:對象.__iter__()得到的結果就是叠代器 叠代器的特性: 叠代器.__next__() 取下一個值
第5天 collection
深淺拷貝 lambda 淺拷貝 遞歸 str 表達式 ron 表達 lam 深淺拷貝 *函數 封裝 內嵌函數 lambda表達式 遞歸第5天 collection
學習筆記(第5天)
學習筆記(由老師筆記自己整理)第五天學習 ARP MAC :物理地址,全球範圍內,唯一的指定一個物理設備; 確定通信設備/終端, 一定要 IP 地址與 MAC 地址結合; 即,必須形成IP地址與MAC地址的對應關系,如下: IP --
黑盒測試實踐(小組測試)第5天
總結 錄制 得到 努力 任務 設計 ## 文檔 人的 ###總體進展情況 #在各位成員的努力下,測試項目進入了收尾階段: -1.需求說明在莉莎同學的辛勤努力下圓滿完成。 -2.魯慧敏同學花大半天的時間,去設計完所有的用例。
思科高級路由與交換(CISCO 部分) 第5天
nat實現方式 路由交換技術 靜態轉換ip 動態轉換ip ping Day 05 1. 什麽是 NAT?有哪些實現方式? NAT(網絡地址轉換):通過將內部網絡的私有 IP 地址翻譯成全球唯一的公有 IP 地址,使內部網絡可 以連接到互聯網等外部網絡上。 NAT 的實現方式: 靜態轉換;I
Python第5天學習心得
加油 ros 困難 外國人 eps 細致 都是 上班 做事 第4天交了第一次的作業,感謝路飛學成李露老師的耐心修改,給了80分,心中倍感鼓舞。 李露老師對代碼規範提出了要求,後續要認真拜讀一下Guido van Rossum的代碼規範要求,外國人做事就是嚴謹細致,初學咱就不
第5天,python之路
循環 reverse() 元組 [] def .so int fault rem 已經過了兩三天了,東西一點沒來寫,今天慢慢的寫吧。 還是會按Alex Li的流程來學習,編寫 寫出自己的東西 常用的數據類型 簡單的有,str ,int ,
【javaWeb】第68天——SSH練習第五天
crm練習 課程內容 課程目標 1. 通過SSH框架完成基本功能的開發 使用者模組 功能一:使用者註冊功能 1. 可以先判斷登入名是否已經存在 2. 要給密碼使用MD5進行加密操作 功能二:使用者登入功能 1. 登入功能要注意
【javaWeb】第66天——SSH練習第四天
crm練習 課程內容 課程目標 1. 通過SSH框架完成基本功能的開發 使用者模組 功能一:使用者註冊功能 1. 可以先判斷登入名是否已經存在 2. 要給密碼使用MD5進行加密操作 功能二:使用者登入功能 1. 登入功能要注意
【javaWeb】第66天——SSH練習第三天
crm練習 課程內容 課程目標 1. 通過SSH框架完成基本功能的開發 使用者模組 功能一:使用者註冊功能 1. 可以先判斷登入名是否已經存在 2. 要給密碼使用MD5進行加密操作 功能二:使用者登入功能 1. 登入功能要注意
【javaWeb】第64天——SSH練習第二天
crm練習 課程內容 課程目標 1. 通過SSH框架完成基本功能的開發 使用者模組 功能一:使用者註冊功能 1. 可以先判斷登入名是否已經存在 2. 要給密碼使用MD5進行加密操作 功能二:使用者登入功能 1. 登入功能要注意
【javaWeb】第64天——SSH練習第一天
svn的使用 課程回顧:SSH三大框架整合 1. 回顧SSH開發需要的jar和配置檔案 * Struts2框架 * web.xml和struts.xml * Hibernate框架 * hibernate.cfg.xml * Customer.hbm.xml
撩課-Java每天10道面試題第5天
41.Iterator、ListIterator 和 Enumeration的區別? 迭代器是一種設計模式, 它是一個物件, 它可以遍歷並選擇序列中的物件, 而開發人員不需要了解 該序列的底層結構。 迭代器通常被稱為“輕量級”物件, 因為建立它的代價小。 Java中
Alpha衝刺第5天
Alpha第四天 1.團隊成員 鄭西坤 031602542 (隊長) 陳俊傑 031602504 陳順興 031602505 張勝男 031602540 廖鈺萍 031602323 雷光遊 031602319 蘇芳鋥 031602330 2.專案燃盡圖 3.專案
撩課-Python-每天5道面試題-第5天
oat pan eve 思路 radius file math res block 一. 給定一個圓心和半徑, 以及一個點坐標, 判定該點是否在圓內; 例如: 用戶輸入圓心: (1, 2) 半徑: 2.5 測試點為(2, 2)結果: 判定測試點是在圓內 思路: 結合勾股