最近把《spring實戰(zhàn)第四版》讀了一遍蝶缀,跳過了有些過時的章節(jié),把一些要點摘錄下來薄货,方便以后回憶翁都。
內(nèi)容摘錄于自己的有道云筆記
),格式都沒能保留谅猾。柄慰。
<meta charset="utf-8">
第10章 通過Spring和JDBC征服數(shù)據(jù)庫
Spring提供了多個可選的模板。如果直接使用JDBC税娜,那你可以選擇JdbcTemplate坐搔。如果你希望使用對象關系映射
12.1 使用MongoDB持久化文檔數(shù)據(jù)
12.3 使用Redis操作key-value數(shù)據(jù)
15.3 使用Hessian和Burlap發(fā)布遠程服務
第16章 使用Spring MVC創(chuàng)建REST API
第21章 借助Spring Boot簡化Spring開發(fā)
21.3 組合使用Groovy與Spring Boot CLI
21.4 通過Actuator獲取了解應用內(nèi)部狀況
第1部分 Spring的核心
第1章 Spring之旅
1.1 簡化Java開發(fā)
1.1.1 激發(fā)POJO的潛能
pojo 原始性敬矩,可遷移別的平臺
1.1.2 依賴注入
DI ,松散概行,低耦合(xml 或者java ) 面向應用,而不用管如何裝配
1.1.3 應用切面
AOP 也是無需顯示調(diào)用弧岳,而是
面點前后通知
1.1.4 使用模板消除樣板式代碼
jdbc應用
1.2 容納你的Bean
1.2.1 使用應用上下文
2注(注配注網(wǎng))類徑文系X網(wǎng)凳忙。2注淚徑业踏,溫習了X網(wǎng)。
AnnotationConfigApplicationContext:從一個或多個基于Java的配置類中加載Spring應用上下文消略。
AnnotationConfigWebApplicationContext:從一個或多個基于Java的配置類中加載Spring Web應用上下文堡称。
ClassPathXmlApplicationContext:從類路徑下的一個或多個XML配置文件中加載上下文定義,把應用上下文的定義文件作為類
資源艺演。
FileSystemXmlapplicationcontext:從文件系統(tǒng)下的一個或多個XML配置文件中加載上下文定義却紧。
XmlWebApplicationContext:從Web應用下的一個或多個XML配置文件中加載上下文定義。
1.2.2 bean的生命周期
1.3 俯瞰Spring風景線
1.3.1 Spring模塊
1.3.2 Spring Portfolio
1.4 Spring的新功能
1.4.1 Spring 3.1新特性
1.4.2 Spring 3.2新特性
1.4.3 Spring 4.0新特性
1.5 小結
第2章 裝配Bean
2.1 Spring配置的可選方案
它提供了三種主要的裝配機制:
在XML中進行顯式配置胎撤。
在Java中進行顯式配置晓殊。
隱式的bean發(fā)現(xiàn)機制和自動裝配。
2.2 自動化裝配bean
2.2.1 創(chuàng)建可被發(fā)現(xiàn)的bean
@Component 伤提、controller service bean 等
bean 常用要素: id巫俺、name,class肿男,scope
子元素:constructor-arg 介汹、 property
2.2.2 為組件掃描的bean命名
@Component(”beanname“)
2.2.3 設置組件掃描的基礎包
@ComponentScan(“basepackage”)
2.2.4 通過為bean添加注解實現(xiàn)自動裝配
@autowired
用在setter方法或者構造器上
2.2.5 驗證自動裝配
2.3 通過Java代碼裝配bean
有些復雜的bean只能手動
盡管在很多場景下通過組件掃描和自動裝配實現(xiàn)Spring的自動化配置是更為推薦的方式,但有時候自動化配置的方案行不通舶沛,因此需要明確配
置Spring嘹承。比如說,你想要將第三方庫中的組件裝配到你的應用中如庭,在這種情況下叹卷,是沒有辦法在它的類上添
加@Component和@Autowired注解的,因此就不能使用自動化裝配的方案了坪它。
2.3.1 創(chuàng)建配置類
使用@Configuration 聲明一個Config類
2.3.2 聲明簡單的bean
@Bean 定義一個 方法bean
2.3.3 借助JavaConfig實現(xiàn)注入
那么該bean 即可被自動填充進來
2.4 通過XML裝配bean
創(chuàng)建xml文件骤竹,按規(guī)范
2.4.1 創(chuàng)建XML配置規(guī)范
2.4.2 聲明一個簡單的<bean>
參數(shù)的聲明方法:
a。<constructor-arg>元素
b往毡。使用Spring 3.0所引入的c-命名空間
2.4.3 借助構造器注入初始化bean
2.4.4 設置屬性
2.5 導入和混合配置
2.5.1 在JavaConfig中引用XML配置
2.5.2 在XML配置中引用JavaConfig
2.6 小結
第3章 高級裝配
環(huán)境开瞭、名字惩阶、作用域 環(huán)域名 換個域名断楷,高級裝配
3.1 環(huán)境與profile
3.1.1 配置profile bean
@Profile(SomeClass.class)
3.1.2 激活profile
配置active或者default
test的時候使用AtiveProfile來指定profile
3.2 條件化的bean
@Conditional(SomeClass).然后someClass來實現(xiàn)condition的match接口冬筒,match中可以獲取上下文變量
3.3 處理自動裝配的歧義性
3.3.1 標示首選的bean
@Primary
3.3.2 限定自動裝配的bean
使用@Qualifier(”id“)代表只要這個id的been
也自己編寫標注
3.4 bean的作用域
單例舞痰、原型、會話响牛、請求:單元話請玷禽,單元請人對話,確定scope范圍
3.4.1 使用會話和請求作用域
3.4.2 在XML中聲明作用域代理
3.5 運行時值注入
3.5.1 注入外部的值
自動裝配env呀打,然后從環(huán)境里讀取
使用占位符
3.5.2 使用Spring表達式語言進行裝配
咒語SPel矢赁,格式 #{} 警察擴音器
3.6 小結
第4章 面向切面的Spring
應用:日志、緩存贬丛、安全撩银、事務 日緩安事 日緩慢的安上了完事;
4.1 什么是面向切面編程
術語解釋:
連接點:就是全身可以操作的點豺憔,比如全身上下允許注射的靜脈位置额获,java應用里 比如類初始化,變量改變恭应,調(diào)用方法時抄邀、拋出異常時、甚至修改一個字段時暮屡。這些發(fā)生改變的可以用來觀察的因果點
切點:就是要注入的點撤摸,就是醫(yī)生要注射的點,就是程序中可以攔截的點,類比攔截器對特定path進行攔截,我們通常使用
明確的類和方法名稱酒朵,或是利用正則表達式定義所匹配的類和方法名稱來指定這些切點匙铡。有些AOP框架允許我們創(chuàng)建動態(tài)的切點鳖眼,可以根據(jù)運
行時的決策(比如方法的參數(shù)值)來決定是否應用通知。
advice:就是在切點處進行的操作匪凡,比如注射前先消毒稠通,注射時注入特定注射液,注射后摁住等等
aspect:就是包含切點和advice一整體的類、方法體碾篡,類似于整個interceptor類
https://blog.csdn.net/q982151756/article/details/80513340
織入是把切面應用到目標對象并創(chuàng)建新的代理對象的過程魁瞪。切面在指定的連接點被織入到目標對象中。在目標對象的生命周期里有多個點可以進行織入:
編譯期:切面在目標類編譯時被織入。這種方式需要特殊的編譯器。AspectJ的織入編譯器就是以這種方式織入切面的。
類加載期:切面在目標類加載到JVM時被織入樟遣。這種方式需要特殊的類加載器(ClassLoader)瞻佛,它可以在目標類被引入應用之前增
強該目標類的字節(jié)碼文搂。AspectJ 5的加載時織入(load-time weaving,LTW)就支持以這種方式織入切面。
運行期:切面在應用運行的某個時刻被織入待侵。一般情況下傀缩,在織入切面時,AOP容器會為目標對象動態(tài)地創(chuàng)建一個代理對象。Spring AOP就是以這種方式織入切面的。
4.1.1 定義AOP術語
4.1.2 Spring對AOP的支持
Spring在在運運行行時時通通知知對對象象
通過在代理類中包裹切面楞慈,Spring在運行期把切面織入到Spring管理的bean中令蛉。如圖4.3所示运杭,代理類封裝了目標類,并攔截被通知方法的調(diào)
用,再把調(diào)用轉發(fā)給真正的目標bean。當代理攔截到方法調(diào)用時绘沉,在調(diào)用目標bean方法之前煎楣,會執(zhí)行切面邏輯。
4.2 通過切點來選擇連接點
因為Spring基于動態(tài)代理车伞,所以Spring只支持方法連接點择懂。這與一些
其他的AOP框架是不同的困曙,例如AspectJ和JBoss飘痛,除了方法切點,它們還提供了字段和構造器接入點。
4.2.1 編寫切點
Spring借助AspectJ的的切點表達式語來定義Spring切面
AspectJ指示器 描 述
arg() 限制連接點匹配參數(shù)為指定類型的執(zhí)行方法
@args() 限制連接點匹配參數(shù)由指定注解標注的執(zhí)行方法
execution() 用于匹配是連接點的執(zhí)行方法
this() 限制連接點匹配AOP代理的bean引用為指定類型的類
target 限制連接點匹配目標對象為指定類型的類
@target() 限制連接點匹配特定的執(zhí)行對象柬祠,這些對象對應的類要具有指定類型的注解
within() 限制連接點匹配指定的類型
@within() 限制連接點匹配指定注解所標注的類型(當使用Spring AOP時赘阀,方法定義在由指定的注解所標注的類里)
@annotation 限定匹配帶有指定注解的連接點
4.2.2 在切點中選擇bean
除了所列的指示器外,Spring還引入了一個新的bean()指示器是目,它允許我們在切點表達式中使用bean的ID來標識bean桐磁。bean()使用bean ID或bean名稱作為參數(shù)來限制切點只匹配特定的bean珠闰。
4.3 使用注解創(chuàng)建切面
4.3.1 定義切面
相關注解的寫法:
注解實例
4.3.2 創(chuàng)建環(huán)繞通知
4.3.3 處理通知中的參數(shù)
4.3.4 通過注解引入新功能
4.4 在XML中聲明切面
4.4.1 聲明前置和后置通知
4.4.2 聲明環(huán)繞通知
4.4.3 為通知傳遞參數(shù)
4.4.4 通過切面引入新的功能
4.5 注入AspectJ切面
4.6 小結
第2部分 Web中的Spring
第5章 構建Spring Web應用程序
5.1 Spring MVC起步
5.1.1 跟蹤Spring MVC的請求
request-->DispatchServerlet--->handlerMapping---->controller--->viewResolver-->view
5.1.2 搭建Spring MVC
|
配置dispatchServerlet均践,實現(xiàn)ServletContainerInitializer柄沮,下面是需要實現(xiàn)的方法
|
|
方法一
|
getServletMappings
|
進行路徑映射
|
|
|
方法二
|
GetServletConfigClasses
|
返回的帶有@Configuration注解的 類將會用來定義DispatcherServlet應用上下文中的bean
|
DispatcherServlet加載包含Web組件的bean,如控制器糠爬、視圖解析器以及處理器映射
|
|
方法三
|
getRootConfigClasses()
|
方法返回的帶有@Configuration注解的類將 會用來配置ContextLoaderListener創(chuàng)建的應用上下文中的bean寇荧。
|
ContextLoaderListener要加載 應用中的其他bean。這些bean通常是驅(qū)動應用后端的中間層和數(shù)據(jù)層組件执隧。
|
serverlet 都有哪些配置呢揩抡?
- 啟用spring MVC
- 配置組件掃描
- 配置視圖解析器
- 配置靜態(tài)資源加載器
5.1.3 Spittr應用簡介
5.2 編寫基本的控制器
5.2.1 測試控制器
5.2.2 定義類級別的請求處理
@RequestMapping({"/","/otherPath",method=POST})
5.2.3 傳遞模型數(shù)據(jù)到視圖中
5.3 接受請求的輸入
參數(shù)的形式
- 請求參數(shù)里
- 請求路徑里
- 表單里
5.3.1 處理查詢參數(shù)
@RequestParam(value="FieldName",defaultValue="")
5.3.2 通過路徑參數(shù)接受輸入
@RequestMapping({"/{fieldName}",method=POST})
@PathVariable("spittleId")
5.4 處理表單
5.4.1 編寫處理表單的控制器
5.4.2 校驗表單
- 在pojo的屬性前加上合法注解
- 在controller里加上valid注解
5.5 小結
第6章 渲染W(wǎng)eb視圖
6.1 理解視圖解析
- viewResolver接口接受視圖string和locale對象,返回一個view接口殴玛,
- view接口負責渲染
內(nèi)置13中resolver捅膘,只需進行配置
6.2 創(chuàng)建JSP視圖
6.2.1 配置適用于JSP的視圖解析器
6.2.2 使用Spring的JSP庫
6.3 使用Apache Tiles視圖定義布局
6.3.1 配置Tiles視圖解析器
6.4 使用Thymeleaf
6.4.1 配置Thymeleaf視圖解析器
6.4.2 定義Thymeleaf模板
6.5 小結
jsp技術以及被前后端分離替代,暫不關注
第7章 Spring MVC的高級技術
7.1 Spring MVC配置的替代方案
7.1.1 自定義DispatcherServlet配置
- serverletInitializer 的三個只是必要方法滚粟,還有額外方法customizeRegistration 重載自定義注冊
在AbstractAnnotation-
ConfigDispatcherServletInitializer將DispatcherServlet注冊到Servlet容器中之后寻仗,就會調(diào)
用customizeRegistration(),并將Servlet注冊后得到的Registration.Dynamic傳遞進來凡壤。通過重
載customizeRegistration()方法署尤,我們可以對DispatcherServlet進行額外的配置
7.1.2 添加其他的Servlet和Filter
實現(xiàn)Spring的WebApplicationInitializer接口耙替,在該方法中可以向參數(shù)里的context加載servlet 或者filter
7.1.3 在web.xml中聲明DispatcherServlet
7.2 處理multipart形式的數(shù)據(jù)
7.2.1 配置multipart解析器
7.2.2 處理multipart請求
三種格式
@RequestPart("") byte[] bytes 字節(jié)流的形式
@RequestPart("") Part part part格式
實現(xiàn)了MultipartFile接口
7.3 處理異常
7.3.1 將異常映射為HTTP狀態(tài)碼
7.3.2 編寫異常處理的方法
@ExceptionHanler
7.4 為控制器添加通知
單獨創(chuàng)建一個類,使用@ControllerAdvice注解來創(chuàng)建控制器通知
7.5 跨重定向請求傳遞數(shù)據(jù)
7.5.1 通過URL模板進行重定向
7.5.2 使用flash屬性
7.6 小結
第8章 使用Spring Web Flow
webflow已不適用曹体,跳過
8.1 在Spring中配置Web Flow
8.1.1 裝配流程執(zhí)行器
8.1.2 配置流程注冊表
8.1.3 處理流程請求
8.2 流程的組件
8.2.1 狀態(tài) 8.2.2 轉移
8.2.3 流程數(shù)據(jù)
8.3 組合起來:披薩流程
8.3.1 定義基本流程
8.3.2 收集顧客信息
8.3.3 構建訂單
8.3.4 支付
8.4 保護Web流程
8.5 小結
第9章 保護Web應用
9.1 Spring Security簡介
用于配置相關界面進入之前的鑒權
9.1.1 理解Spring Security的模塊
11個模塊俗扇,有ACL ,core,configuration箕别,web等
9.1.2 過濾Web請求
本質(zhì)上是代濾社DelegatingFilterProxy 會 委托給過濾鏈springSecurityFilterChain铜幽,過濾鏈在web初始化時addFilter 助記:大反派委托給國旅聯(lián)合
9.1.3 編寫簡單的安全性配置
簡單來講就是實現(xiàn)WebSecurityConfigurerAdapter,同時啟用@EnableWebMvcSecurity
里面有三個方法
分別對應http串稀、web除抛、AuthencationManagerBuilder
9.2 選擇查詢用戶詳細信息的服務
選擇在哪里查詢用戶信息
9.2.1 使用基于內(nèi)存的用戶存儲
9.2.2 基于數(shù)據(jù)庫表進行認證
9.2.3 基于LDAP進行認證
不懂
9.2.4 配置自定義的用戶服務
這里面幾個概念
- 通過 AuthenticationManager 提供了進行用戶認證方法的抽象,允許通過 ProviderManager 和 AuthenticationProvider 來組裝和實現(xiàn)自己的認證方法
- 通過 UserDetails 和 UserDetailsService 提供了用戶詳細信息和獲取用戶詳細信息方式的抽象【存儲用戶在后端的真實記錄】
- 通過 Authentication 提供了用戶認證信息和認證結果的抽象【存儲用戶通過前端傳來的待驗證信息】
- 通過 SecurityContext 和 SecurityContextHolder 提供了保存認證結果的方式
詳見文章https://www.cnblogs.com/rgbit/p/11784371.html
其中需要實現(xiàn)userDetailService
9.3 攔截請求
9.3.1 使用Spring表達式進行安全保護
9.3.2 強制通道的安全性
requiresChannel()方
法母截,借助這個方法能夠為各種URL模式聲明所要求的通道到忽。
9.3.3 防止跨站請求偽造
9.4 認證用戶
9.4.1 添加自定義的登錄頁
調(diào)用formLogin()
9.4.2 啟用HTTP Basic認證
9.4.3 啟用Remember-me功能
9.4.4 退出
9.5 保護視圖
9.5.1 使用Spring Security的JSP標簽庫
9.5.2 使用Thymeleaf的Spring Security方言
9.6 小結
第3部分 后端中的Spring
第10章 通過Spring和JDBC征服數(shù)據(jù)庫
消除持久化代碼里的模板代碼
10.1 Spring的數(shù)據(jù)訪問哲學
使用Repository來避免應用與數(shù)據(jù)訪問策略耦合在一起,Repository背后可以對應多種數(shù)據(jù)庫訪問技術
10.1.1 了解Spring的數(shù)據(jù)訪問異常體系
10.1.2 數(shù)據(jù)訪問模板化
Spring將數(shù)據(jù)訪問過程中固定的和可變的部分明確劃分為兩個不同的類:模板(template)和回調(diào)(callback)
Spring提供了多個可選的模板清寇。如果直接使用JDBC喘漏,那你可以選擇JdbcTemplate。如果你希望使用對象關系映射
框架华烟,那HibernateTemplate或JpaTemplate可能會更適合你翩迈。
10.2 配置數(shù)據(jù)源
無論選擇Spring的哪種數(shù)據(jù)訪問方式,你都需要配置一個數(shù)據(jù)源的引用垦江。Spring提供了在Spring上下文中配置數(shù)據(jù)源bean的多種方式帽馋,包括:
- 通過JDBC驅(qū)動程序定義的數(shù)據(jù)源搅方;
- 通過JNDI查找的數(shù)據(jù)源比吭;
- 連接池的數(shù)據(jù)源。
重點就是DI一個datasource
10.2.1 使用JNDI數(shù)據(jù)源
姨涡?
10.2.2 使用數(shù)據(jù)源連接池
10.2.3 基于JDBC驅(qū)動的數(shù)據(jù)源
與連接池的區(qū)別在于衩藤,這里的連接只有一個
10.2.4 使用嵌入式的數(shù)據(jù)源
10.2.5 使用profile選擇數(shù)據(jù)源
通過使用@Profile 來選擇在不同的環(huán)境使用不同的source
10.3 在Spring中使用JDBC
10.3.1 應對失控的JDBC代碼
正常的一個數(shù)據(jù)庫操作包括
連接數(shù)據(jù)庫,獲取連接涛漂;創(chuàng)建sql語句;執(zhí)行操作匈仗;處理返回對象瓢剿;捕獲異常;斷開連接悠轩,清理資源
這些可以復用的代碼稱為樣板代碼
10.3.2 使用JDBC模板
第一步间狂,創(chuàng)建JdbcTemplate,會自動注入配置過的datasource
第二部火架,使用JdbcOperations鉴象,operations 會在template生成之后自動注入進來
10.4 小結
學習了如何配置jdbc忙菠,以及使用模板代碼來操作數(shù)據(jù)庫
第11章 使用對象-關系映射持久化數(shù)據(jù)
jdbc的基礎功能比較簡單,不能滿足一些復雜特性
- 延遲加載(Lazy loading):隨著我們的對象關系變得越來越復雜纺弊,有時候我們并不希望立即獲取完整的對象間關系牛欢。舉一個典型的例子,假設我們在查詢一組PurchaseOrder對象淆游,而每個對象中都包含一個LineItem對象集合傍睹。如果我們只關心PurchaseOrder的屬性,那查詢出LineItem的數(shù)據(jù)就毫無意義犹菱。而且這可能是開銷很大的操作蚌堵。延遲加載允許我們只在需要的時候獲取數(shù)據(jù)。
- 預先抓惹昱(Eager fetching):這與延遲加載是相對的疲牵。借助于預先抓取,我們可以使用一個查詢獲取完整的關聯(lián)對象虑椎。如果我們需要PurchaseOrder及其關聯(lián)的LineItem對象震鹉,預先抓取的功能可以在一個操作中將它們?nèi)繌臄?shù)據(jù)庫中取出來,節(jié)省了多次查詢的成本捆姜。
- 級聯(lián)(Cascading):有時传趾,更改數(shù)據(jù)庫中的表會同時修改其他表∧嗉迹回到我們訂購單的例子中浆兰,當刪除Order對象時,我們希望同時在數(shù)據(jù)庫中刪除關聯(lián)的LineItem珊豹。
object-relational mapping簸呈,ORM提供了很多豐富的特性,Spring對多個持久化框架都提供了支持店茶,包括Hibernate蜕便、iBATIS、Java數(shù)據(jù)對象(Java Data Objects贩幻,JDO)以及Java持久化API(Java
Persistence API轿腺,JPA)。
11.1 在Spring中集成Hibernate
使用Hibernate所需的主要接口是org.hibernate.Session丛楚。Session接口提供了基本的數(shù)據(jù)訪問功能
11.1.1 聲明Hibernate的Session工廠
- Session對象通過SessionFactoryBean生成
- factoryBean的生成方法:初始化族壳;配參數(shù),這里參數(shù)包括[datasource, dialect,要管理的對象結構]
如下圖
11.1.2 構建不依賴于Spring的Hibernate代碼
使用session來操作數(shù)據(jù)庫
11.2 Spring與Java持久化API
JPA的應用程序需要的接口是由EntityManageer提供趣些,而他是由用EntityManagerFactory生成仿荆。
EntityManagerFactory的生成方式有兩種:
應用程序管理類型(Application-managed):當應用程序向?qū)嶓w管理器工廠直接請求實體管理器時,工廠會創(chuàng)建一個實體管理器。在這種模式下赖歌,程序要負責打開或關閉實體管理器并在事務中對其進行控制枉圃。這種方式的實體管理器適合于不運行在Java EE容器中的獨立應用程序÷耄【程序負責維護manager的打開或關閉】
容器管理類型(Container-managed):實體管理器由Java EE創(chuàng)建和管理孽亲。應用程序根本不與實體管理器工廠打交道。相反展父,實體管理器直接通過注入或JNDI來獲取返劲。容器負責配置實體管理器工廠。這種類型的實體管理器最適用于Java EE容器【程序用就行了栖茉,不用維護】
11.2.1 配置實體管理器工廠
這里只講容器管理類型下的配置篮绿,只需要制定datasource 和adapter(U盤和適配器)
11.2.2 編寫基于JPA的Repository
使用@PersistenceContext 創(chuàng)建entityManager
11.3 借助Spring Data實現(xiàn)自動化的JPA Repository
代碼中依然有樣板代碼,
對于每一個entity吕漂,都要 寫一個方法
對于同一個操作類型亲配,比如findall都要寫多次方法
spring data 把這又推進了一步。
- 在Java配置類上添加@EnableJpaRepositories注解惶凝。這會開始對該value所包含的package進行掃描
- 繼承Spring Data JPA的JpaRepository接口
SpitterRepository擴展了Spring Data JPA的JpaRepository(稍后吼虎,我會介紹幾個其他的接口)。通過這種方式苍鲜,JpaRepository進行了參數(shù)化思灰,所以它就能知道這是一個用來持久化Spitter對象的Repository,并且Spitter的ID類型為Long混滔。另外洒疚,它還會繼承18個執(zhí)行持久化操作的通用方法,如保存Spitter坯屿、刪除Spitter以及根據(jù)ID查詢Spitter
11.3.1 定義查詢方法
當創(chuàng)建Repository實現(xiàn)的時候油湖,Spring Data會檢查Repository接口的所有方法,解析方法的名稱愿伴,并基于被持久化的對象來試圖推測方法的目的肺魁。本質(zhì)上电湘,Spring Data定義了一組小型的領域特定語言(domain-specific language 隔节,DSL),在這里寂呛,持久化的細節(jié)都是通過Repository方法的簽名來描述的怎诫。
只需要定義接口,而不用實現(xiàn)
11.3.2 聲明自定義查詢
如果所需的數(shù)據(jù)無法通過方法名稱進行恰當?shù)孛枋龃荆敲次覀兛梢允褂聾Query注解
11.3.3 混合自定義的功能
某些query無法實現(xiàn)幻妓,只好借助原生的jpa來實現(xiàn),這時可以
- 新建類通過em來操作sql
- 組合這個類
如下圖
11.4 小結
hibernate 使用session劫拢,jpa使用entitymanager肉津,
使用spring data 連接口的實現(xiàn)都不用寫了
第12章 使用NoSQL數(shù)據(jù)庫
括MongoDB强胰、Neo4j和Redis。它不僅支持自動化的Repository妹沙,還支持基于模板的數(shù)據(jù)訪問和映射注解
12.1 使用MongoDB持久化文檔數(shù)據(jù)
12.1.1 啟用MongoDB
借助@EnableMongoRepositories用用Spring Data MongoDB
12.1.2 為模型添加注解偶洋,實現(xiàn)MongoDB持久化
12.1.3 使用MongoTemplate訪問MongoDB
使用mongoOperations來操作
12.1.4 編寫MongoDB Repository
跟jpa的類似
先啟用(12.1.1里已經(jīng)啟用過了),然后擴展MongoRepository
12.2 使用Neo4j操作圖數(shù)據(jù)
該部分略過
12.2.1 配置Spring Data Neo4j
12.2.2 使用注解標注圖實體
12.2.3 使用Neo4jTemplate
12.2.4 創(chuàng)建自動化的Neo4j Repository
12.3 使用Redis操作key-value數(shù)據(jù)
12.3.1 連接到Redis
實現(xiàn)redis連接工廠方法
12.3.2 使用RedisTemplate
redis提供了兩個模板
RedisTemplate
StringRedisTemplate
針對redis的物種數(shù)據(jù)類型距糖,template提供了多種api
12.3.3 使用key和value的序列化器
redis在存儲和取回的時候玄窝,對相應數(shù)據(jù)進行了序列化,可以使用的序列化器有
GenericToStringSerializer:使用Spring轉換服務進行序列化悍引;
JacksonJsonRedisSerializer:使用Jackson 1恩脂,將對象序列化為JSON;
Jackson2JsonRedisSerializer:使用Jackson 2趣斤,將對象序列化為JSON俩块;
JdkSerializationRedisSerializer:使用Java序列化;
OxmSerializer:使用Spring O/X映射的編排器和解排器(marshaler和unmarshaler)實現(xiàn)序列化浓领,用于XML序列化典阵;
StringRedisSerializer:序列化String類型的key和value。
我們可以制定使用哪個方式來序列化
12.4 小結
第13章 緩存數(shù)據(jù)
13.1 啟用對緩存的支持
1.啟用緩存@EnableCaching
2.初始化緩存管理器
13.1.1 配置緩存管理器
spring基于緩存存儲的位置提供了多個緩存管理器镊逝,以redis為例壮啊,
- 先生成redis的連接工廠
- 再生成redis 的緩存管理器
13.2 為方法添加注解以支持緩存
啟用了緩存之后,需要在使用緩存的地方加上注解
13.2.1 填充緩存
cacheable 如果發(fā)現(xiàn)緩存存在撑蒜,就不會再調(diào)用方法歹啼,
而cacheput 無論如何都會調(diào)用,相當于把結果順便存到緩存里座菠,這樣的好處是別的方法去請求的時候狸眼,可以直接讀緩存
可以通過SpEL表達式制定緩存的key,result是該方法的返回結果
13.2.2 移除緩存條目
@CacheEvice
13.3 使用XML聲明緩存
略過
13.4 小結
緩存實際上是一種切面浴滴,注解添加了切點
第14章 保護方法應用
使用secured來限制方法請求者的權限
14.1 使用注解保護方法
14.1.1 使用@Secured注解限制方法調(diào)用
14.1.2 在Spring Security中使用JSR-250的@RolesAllowed注解
14.2 使用表達式實現(xiàn)方法級別的安全性
14.2.1 表述方法訪問規(guī)則
14.2.2 過濾方法的輸入和輸出
14.3 小結
第4部分 Spring集成
第15章 使用遠程服務
分布式服務之間的發(fā)布和調(diào)用
15.1 Spring遠程調(diào)用概覽
java可以使用的遠程調(diào)用技術
- 遠程方法調(diào)用(Remote Method Invocation拓萌,RMI);
- Caucho的Hessian和Burlap升略;
- Spring基于HTTP的遠程服務微王;
- 使用JAX-RPC和JAX-WS的Web Service。
spring提供了一個代理bean品嚣,讓我們訪問遠程的方法炕倘,就像訪問本地的一樣
15.2 使用RMI
15.2.1 導出RMI服務
- 1.編寫一個服務實現(xiàn)類,類中的方法必須拋出java.rmi.RemoteException異常翰撑;
- 2.創(chuàng)建一個繼承于java.rmi.Remote的服務接口罩旋;
- 3.運行RMI編譯器(rmic),創(chuàng)建客戶端stub類和服務端skeleton類;
- 4.啟動一個RMI注冊表涨醋,以便持有這些服務瓜饥;
- 5.在RMI注冊表中注冊服務。
手動的化需要這些步驟浴骂,spring簡化了樣板代碼压固,通過配置rmi導出器即可完成導出
15.2.2 裝配RMI服務
使用遠程服務很簡單,只需要配置代理工廠bean就行了
代理工廠生成的代理會處理網(wǎng)絡交互的細節(jié)
15.3 使用Hessian和Burlap發(fā)布遠程服務
Hessian靠闭,像RMI一樣帐我,使用二進制消息進行客戶端和服務端的交互。
Burlap是一種基于XML的遠程調(diào)用技術
海森二愧膀,伯來x
15.3.1 使用Hessian和Burlap導出bean的功能
同樣是配置導出器拦键,但是hessian是基于http的,所以還需要配置serverlet的mapping
15.3.2 訪問Hessian/Burlap服務
同樣創(chuàng)建代理工廠bean
15.4 使用Spring的HttpInvoker
15.4.1 將bean導出為HTTP服務
15.4.2 通過HTTP訪問服務
15.5 發(fā)布和使用Web服務
15.5.1 創(chuàng)建基于Spring的JAX-WS端點
15.5.2 在客戶端代理JAX-WS服務
15.6 小結
Spring隱藏了遠程服務的很多細節(jié)檩淋,讓它們表現(xiàn)得好像是本地JavaBean一樣
第16章 使用Spring MVC創(chuàng)建REST API
16.1 了解REST
表述性狀態(tài)轉移(Representational State Transfer芬为,REST)
16.1.1 REST的基礎知識
16.1.2 Spring是如何支持REST的
- 控制器可以處理所有的HTTP方法,包含四個主要的REST方法:GET蟀悦、PUT媚朦、DELETE以及POST。 借助@PathVariable注解日戈,控制器能夠處理參數(shù)化的URL(將變量輸入作為URL的一部分)
- 借助Spring的視圖和視圖解析器询张,資源能夠以多種方式進行表述,包括將模型數(shù)據(jù)渲染為XML浙炼、JSON份氧、Atom以及RSS的View實現(xiàn);
- 可以使用ContentNegotiatingViewResolver來選擇最適合客戶端的表述弯屈;
- 借助@ResponseBody注解和各種HttpMethodConverter實現(xiàn)蜗帜,能夠替換基于視圖的渲染方式;
- 類似地资厉,@RequestBody注解以及HttpMethodConverter實現(xiàn)可以將傳入的HTTP數(shù)據(jù)轉化為傳入控制器處理方法的Java對象厅缺;
- 借助RestTemplate,Spring應用能夠方便地使用REST資源宴偿。
16.2 創(chuàng)建第一個REST端點
spring 提供了兩種方法用于java到用戶的表述轉換
- 內(nèi)容協(xié)商(Content negotiation):選擇一個視圖湘捎,它能夠?qū)⒛P弯秩緸槌尸F(xiàn)給客戶端的表述形式;
- 消息轉換器(Message conversion):通過一個消息轉換器將控制器所返回的對象轉換為呈現(xiàn)給客戶端的表述形式
16.2.1 協(xié)商資源表述
內(nèi)容協(xié)商也是一種viewResolver酪我,跟之前渲染頁面一樣
16.2.2 使用HTTP信息轉換器
消息轉換(message conversion)提供了一種更為直接的方式消痛,它能夠?qū)⒖刂破鳟a(chǎn)生的數(shù)據(jù)轉換為服務于客戶端的表述形式。當使用消息轉換功能時都哭,DispatcherServlet不再需要那么麻煩地將模型數(shù)據(jù)傳送到視圖中。實際上,這里根本就沒有模型欺矫,也沒有視圖纱新,只有控制器產(chǎn)生的數(shù)據(jù),以及消息轉換器(message converter)轉換數(shù)據(jù)之后所產(chǎn)生的資源表述穆趴。
Spring提供了多個HTTP信息轉換器脸爱,我們需要使用@ResponseBody來告知Spring,我們要將返回的對象作為資源發(fā)送給客戶端未妹,并將其轉換為客戶端可接受的表述形式
具體轉換成哪種格式簿废,跟用戶的accept 頭部有關
使用@RestController 來合并controller 和responsebody
16.3 提供資源之外的其他內(nèi)容
16.3.1 發(fā)送錯誤信息到客戶端
16.3.2 在響應中設置頭部信息
16.4 編寫REST客戶端
16.4.1 了解RestTemplate的操作
使用RestTemplate來訪問http資源
16.4.2 GET資源
16.4.3 檢索資源
16.4.4 抽取響應的元數(shù)據(jù)
16.4.5 PUT資源
16.4.6 DELETE資源
16.4.7 POST資源數(shù)據(jù)
16.4.8 在POST請求中獲取響應對象
16.4.9 在POST請求后獲取資源位置
16.4.10 交換資源
16.5 小結
第17章 Spring消息
使用Java消息服務(Java MessageService,JMS)和高級消息隊列協(xié)議(Advanced Message Queuing Protocol络它,AMQP)發(fā)送和接收消息
異步消息不同于遠程調(diào)用的同步消息
17.1 異步消息簡介
17.1.1 發(fā)送消息
分為點對點消息模型和發(fā)布訂閱消息模型
17.1.2 評估異步消息的優(yōu)點
17.2 使用JMS發(fā)送消息
17.2.1 在Spring中搭建消息代理
指定amq的地址族檬、topic、queue
17.2.2 使用Spring的JMS模板
使用默認的topic化戳、默認的消息轉換器单料,只需要操作jmsoperation即可一鍵發(fā)送消息
使用receiveAndConvert就能接收消息
17.2.3 創(chuàng)建消息驅(qū)動的POJO
但是接收消息這個方法調(diào)用該寫在哪呢?EJB2規(guī)范的一個重要內(nèi)容是引入了消消息息驅(qū)驅(qū)動動bean(message-driven bean点楼,MDB)
只需要配置jms 的listener即可完成消息接收
17.2.4 使用基于消息的RPC
17.3 使用AMQP實現(xiàn)消息功能
17.3.1 AMQP簡介
amqp引入了exchange扫尖,消息分發(fā)支持direct、fanout掠廓、topic换怖、headers四種模式
頭頂直扇 頭上直直的頂著一把扇子
17.3.2 配置Spring支持AMQP消息
配置連接工廠
17.3.3 使用RabbitTemplate發(fā)送消息
convertAndSend
17.3.4 接收AMQP消息
依然可以基于消息驅(qū)動來配置
17.4 小結
第18章 使用WebSocket和STOMP實現(xiàn)消息功能
18.1 使用Spring的低層級WebSocket API
18.2 應對不支持WebSocket的場景
18.3 使用STOMP消息
18.3.1 啟用STOMP消息功能
18.3.2 處理來自客戶端的STOMP消息
18.3.3 發(fā)送消息到客戶端
18.4 為目標用戶發(fā)送消息
18.4.1 在控制器中處理用戶的消息
18.4.2 為指定用戶發(fā)送消息
18.5 處理消息異常
18.6 小結
第19章 使用Spring發(fā)送Email
19.1 配置Spring發(fā)送郵件
19.1.1 配置郵件發(fā)送器
19.1.2 裝配和使用郵件發(fā)送器
19.2 構建豐富內(nèi)容的Email消息
19.2.1 添加附件
19.2.1 添加附件
19.2.2 發(fā)送富文本內(nèi)容的Emai
l 19.3 使用模板生成Email
19.3.1 使用Velocity構建Email消息
19.3.2 使用Thymeleaf構建Email消息
19.4 小結
第20章 使用JMX管理Spring Bean
20.1 將Spring bean導出為MBean
20.1.1 通過名稱暴露方法
20.1.2 使用接口定義MBean的操作和屬性
20.1.3 使用注解驅(qū)動的MBean
20.1.4 處理MBean沖突
20.2 遠程MBean
20.2.1 暴露遠程MBean
20.2.2 訪問遠程MBean
20.2.3 代理MBean
20.3 處理通知
20.3.1 監(jiān)聽通知
20.4 小結
第21章 借助Spring Boot簡化Spring開發(fā)
簡化spring開發(fā)、使用
21.1 Spring Boot簡介
boot 包含四部分:
- Spring Boot Starter:它將常用的依賴分組進行了整合蟀瞧,將其合并到一個依賴中狰域,這樣就可以一次性添加到項目的Maven或Gradle構建 中;
- 自動配置:Spring Boot的自動配置特性利用了Spring 4對條件化配置的支持黄橘,合理地推測應用所需的bean并自動化配置它們兆览;
- 命令行接口(Command-line interface,CLI):Spring Boot的CLI發(fā)揮了Groovy編程語言的優(yōu)勢塞关,并結合自動配置進一步簡化Spring應 用的開發(fā)抬探;
- Actuator:它為Spring Boot應用添加了一定的管理特性。
21.1.1 添加Starter依賴
21.1.2 自動配置
21.1.3 Spring Boot CLI
21.1.4 Actuator
21.2 使用Spring Boot構建應用
21.2.1 處理請求
添加spring-boot-starter-web進來帆赢,不需要配置serverlet
21.2.2 創(chuàng)建視圖
不需要配置viewResolver
21.2.3 添加靜態(tài)內(nèi)容
21.2.4 持久化數(shù)據(jù)
不需要配置連接工廠
21.2.5 嘗試運行
21.3 組合使用Groovy與Spring Boot CLI
21.3.1 編寫Groovy控制器
21.3.2 使用Groovy Repository實現(xiàn)數(shù)據(jù)持久化
21.3.3 運行Spring Boot CLI
21.4 通過Actuator獲取了解應用內(nèi)部狀況
21.5 小結