spring自我提升--我要變禿,不禿不會變強
spring個人的理解
spring是什麼,你該怎麼回答。
答:是一個輕量開源一站式框架,在三層架構中都有自己的一個技術支援。其中最重要的2個概念aop,ioc。控制反轉,面向切面。
mvc和三層架構的區別
(表示層(web層)、業務邏輯層(service層)、資料訪問層(dao層)) MVC是 Model-View-Controller,嚴格說這三個加起來以後才是三層架構中的UI層,也就是說,MVC把三層架構中的UI層再度進行了分化,分成了控制器、檢視、實體三個部分,控制器完成頁面邏輯,通過實體來與介面層完成通話;而C層直接與三層中的BLL進行對話。
MVC可以是三層中的一個表現層框架,屬於表現層。三層和MVC可以共存。
三層是基於業務邏輯來分的,而MVC是基於頁面來分的。
什麼是ioc(你對ioc有什麼理解)
答: 控制反轉,控制物件的建立,物件的管理。通過依賴注入,裝配物件,管理物件的週期,舉個例子,以前是我給你打電話,現在是我等你給我打電話。也就是說原來我們需要new去建立物件,現在將物件的建立交給spring來管理。
能說下ioc是怎麼建立物件的?(DI依賴注入的方式)
答:呼叫無參構造方法,呼叫有參構造方法,使用工廠(靜態和非靜態)類建立
DI依賴注入
指Spring建立物件的過程中,將物件依賴的物件通過注入的形式新增到物件bean元件中
beanfactory和ApplicationContext有什麼區別
applicationcontext介面繼承beanfactory Spring核心工廠是BeanFactory,採用的是延遲載入,在第一次載入getbean的時候初始化,而applicationContext在載入配置的時候初始化。ApplicationContext是對BeanFactory擴充套件。
spring是怎麼解決多執行緒安全問題的呢
使用threadlocal,和scope屬性設定為prototype,一般這兩種方式。 如果bean的作用域是singleton,也就單例的時候。spring通過threadlocal,給每個執行緒提供一個執行緒獨立的變數空間,講到這也已經大概瞭解spring怎麼通過threadlocal來實現安全性,以及為什麼不使用同步鎖,作用域為prototype,表示每次執行緒建立bean的時候都是不同的例項,就不會存在資料被篡改。因為都不是同一例項,資料存放的地址也不相同。
什麼是aop
aop面向切面,面向物件通過繼承,介面來實現從上往下的關係,aop關注的是橫向的,比如日誌,日誌往往分佈在不同的物件中,並且與所在的物件的核心功能沒有任何的交集。降低程式碼的重複。 (個人的理解,就是當我們執行某一個方法時候,在此方法之前執行另一個方法(打一個日誌),或者之後等等,在不修改原來的方法,加強方法,我理解成裝飾模式,(個人聯想認為))
aop怎麼實現的
通過動態代理模式,建立代理物件,增強呼叫用目標物件方法。 (如果不清楚動態代理,可以百度看看靜態代理是怎麼寫的。) 動態代理方法有2種,如果都實現了相同的介面,叫jdk實現,如果是繼承相同的父類,叫gclib實現
aop能做些什麼呢
日誌和事務管理,日誌的解釋就不說了,什麼是事務管理呢, 先說下資料庫事務,如果我要修改表中的一條記錄的話,如果我的sql有問題,那麼我這個還能成功?答案是不能的。要麼不成功,事務回滾,要麼成功,資料修改 分享一個網站 https://blog.csdn.net/chinacr07/article/details/78817449 aop事務管理,就是對資料的一系列的操作,要不全部提交,只要有一條有錯誤,就事務回滾之前的操作。有分為程式設計式和宣告式,宣告式簡單,就在配置檔案配置,然後使用@Transactional
spring bean 的生命週期
1.定義bean,在配置檔案中。 在配置檔案裡面用來進行定義。 2.初始化bean,例項化bean A.在配置檔案中通過指定init-method屬性來完成 B.bean類實現org.springframwork.beans.factory.InitializingBean介面 3.bean呼叫 有4種方式可以得到bean例項,並進行呼叫(無引數(setter),有引數(構造方法),工廠類)。 (4)bean銷燬 銷燬有兩種方式 A.使用配置檔案指定的destroy-method屬性 B.bean類實現org.springframwork.bean.factory.DisposeableBean介面 (個人的一個理解:ioc的底層用通過dom4j解析xml,反射機制,獲得獲得類例項,bean容器中,並提供getBean方法。然後通過beanfactory工廠模式,通過getbean獲得需要的物件例項)
自動裝配和依賴注入
首先說明這個2個概念是在一起的,我中有你,你中有我。 依賴注入的本質就是裝配,裝配是依賴注入的具體行為。慢慢理解。自動裝配的方式有預設的"ref",byname,bytype,構造方法等。而依賴注入分為setter,構造方法,工廠方法
springmvc
最最最核心的前端控制器。懂了這個你其他的拓展知識你都明白 (每一步的操作都要經過前端控制器,我們每一步操作都基本有前端控制器) 在這裡插入圖片描述
springmvc常用的註解和使用
1,controller,service,repository,component
這4個註解,當前在功能上沒有任何區別,被註解的類都會初始化成一個bean,然後交予spring統一管理,為了實現分成管理,建議使用的bean註解 裝配bean的註解 autowired resource 兩種都可以使用在屬性,和屬性setter方法上,功能相同,都是裝配注入bean. 不同之處在於,autowired的是通過bytype,的形式通過bean的型別,如果有重複的型別就需要使用@Qualitied指定類的名稱。 resource,預設是通過byname,但是也可以使用bytype,靈活性上resource好,但autowired的方式更簡單快捷。
2 requestmapping
用於處理url地址對映,通過地址找到具體的介面方法。可以使用在類前面,方法前面,可以用萬用字元*。
3 requestparam
該註解用於方法形參,將請求的引數值傳遞給形參,預設是該引數必填,但也可以說required = false.
4 requestbody與responsebody
簡單的說,用與json資料接收和傳送。 requestbody用於方法形參,通過一個pojo類來接收傳遞的json, responsebody用於返回json型別
5.PathVariable
支援url佔位符,將佔位符的值賦予給引數。該該類的事務屬性。
6.Transactional
mvc配置檔案分析
對一些配置檔案的配置不是太明白,或者說當時瞭解然後又忘記了這次主要將通過springmvc從整體,到細節描述 配置檔案的入口時web.xml,配置檔案又什麼呢,比如資料的連線,最開始我們通過jdbc 去來接資料 每次都要forname 載入驅動,獲得連線connoction,獲得statement執行sql, 獲得resultset 獲得結果集,然後遍歷結果集 關閉有順序的關閉資源。這裡回顧一下。這樣是特別浪費時間的,你每操作一次資料庫就連線一次資料庫,這樣是不現實的。
首先需要配置(2種)在web.xml中
ContextLoaderListener,在web.xml啟動的時候去監聽 contextconfiglocation,去載入spring配置檔案。
配置前端控制器。
我們通常的配置時在spring檔案。
spring我們需要配置datasource資料來源,sqlSessionFactory ,mybatis的dao層的掃描器
bean物件 handlermapping handleradpter
viewresolver檢視解析器
關於aop配置transactional。transactionManager對資料庫事務控制。
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- enable transaction annotation support -->
<tx:annotation-driven transaction-manager="transactionManager" />
aop配置,通知配置。