Spring框架中都用到了哪些設計模式?
1.工廠模式:BeanFactory就是簡單工廠模式的體現,用來創建對象的實例
2.單例模式:Bean默認爲單例模式
3.代理模式:SpringAOP功能用到了JDK的動態代理和CCGLIB字節碼生成技術
4.模板方法:用來解決代碼重複的問題
5.觀察者模式:定義對象建一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都會被通知強制更新
註解的原理
註解本質上是一個繼承了Annotation的特殊接口,其具體實現類是java運行是生成的動態代理類,當通過反射獲取註解時,返回的java運行時生成的動態代理對象,通過代理對象調用自定義註解的方法,最終會調用AnnotationInvocationHandle的invoke方法。該方法會從memberValues這個map中索引出對應的值。而memberValues的來源是java常量池。
SpingJDBC與傳統的JDBC有什麼區別?
Spring的JDBC是在原生態的JDBC上面進行的一次簡單的封裝,提供了一些接口,節省代碼,不管連接、不管事務、不管異常、不管關閉。只需要實現Spring提供的回調類。傳統的JDBC執行過程如下
1.創建連接
2.創建sql語句
3.執行sql語句
4.返回結果
5.關閉資源
在SpringJDBC中只需要實現2、4就可以了,其他都由Spring完成,,而2、4都是通過實現指定的接口,然後將實現類傳遞給Spring句完成了
什麼是面向切面編程?
針對業務處理過程中的切面進行提取,他所面對的是處理過程中的某個步驟或者階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果
爲了降低java的開發的複雜性,Spring採取了一下四種關鍵策略?
1.通過POJO的輕量級和最小侵入性編程
2.通過依賴注入和麪向接口實現松耦合
3.給予切面個管理進行聲明式編程
4.通過切面和模板減少樣板式代碼
Spring切面虧應用五種類型的通知?
1.Before
2.After
3.After-returning
4.After-throwing
5.Around
Spring提供的四種各具特色的AOP支持
1.給予代理的經典的AOP
2.@AspectJ註解驅動切面
3.純POJO切面
4.注入式AspectJ切面(適合Spring的各個版本)
聲明式事務管理的事務屬性有一下五種?
1.傳播行爲:傳播行爲定義了客戶端與被調用方法之間的事務邊界
2.隔離級別:隔離級別定義了一個事務可能受其他併發事務影響的程度
3.只讀:表明事務是否式只讀的
4.事務超時:指定事務運行的最長時間,超時就會回滾
5.回滾規則:定義了哪些異常會導致事務回滾哪些不會
髒讀、不可重複讀和幻讀分別式什麼意思?
髒讀:一個事務讀取了另一個事務改寫但是未提交的數據時。如果改寫在稍後被回滾了,那麼第一個事務獲取的數據就是無效的
不可重複讀:一個事務執行相同的查詢兩次或者兩次以上,但是每次都得到不同 數據。通常是因爲另一個併發事務在兩次查詢期間更新了數據
幻讀:一個事務讀取了幾行數據,接着另一個併發事務插入了一些數據,在隨後的查詢中,第一個事務發現多了一些更本不存在的數據
Spring註解說明?
採用掃描的方式配置SpringXMl書寫方式
<context:component-scanbase-package="包名"/>
@Service:用於標註業務層組件
@Controller用於標註控制層組件
@Component 泛指組件,用於不明確的類
@Repository用戶標註數據庫訪問組件
@PostConstruct創建對象時執行的方法
@PreDestory對象摧毀時執行的方法
@Autowired直接訪問私有屬性,直接給私有屬性輸入值