REST方法
Spring 核心mysql
IOC(Inversion of Controller)-面向對象的一個準則,對象的控制(建立和管理)由容器或者框架來實現,而不是開發者直接調用,開發者只須要實現接口或者放入本身的類就能夠程序員
依賴注入(Dependency Injection DI)每一個方法都有一個獨立的對象,經過接口去調用其餘的對象,這些對象服務建立的時候才實現,是一種逆向的對象建立方式,Spring 中經過Constructor 或setter實現,實現了DI的庫叫作容器web
面向切面編程(Aspect oriented programing,AOP)一種編程範式,容許橫跨應用功能的切面,用於表示同時用在多個函數上的功能。事務,日誌,權限等spring
Spring自動裝配sql
經過識別以定義的bean ,spring 的裝配機制容許自動解析bean之間的依賴,提供如下四種方法:數據庫
默認值,不會自動裝配,必須自定義依賴
ByName:使用property name尋找bean
byType:使用property type 尋找bean,多個同類型的bean會拋出異常
constructor :使用構造函數參數類型尋找bean
Spring Bean :由spring容器建立的對象,叫作spring bean編程
Bean 提供五種做用域:安全
每一個容器只建立該bean 的一個實例,防止數據不一致
Prototype :每次請求都會建立新的實例
Request:和prototype同樣,用於web應用每一個Http 請求都會建立一個實例
Session 每一個Http 會話會建立一個新實例
Global-session:爲Portlet 應⽤建立全局會話bean
服務器
Spring Bean生命週期:session
Spring提供四種方法控制生命週期:
InitialzingBean and DisposableBean 回掉接口
用於特殊行爲的Aware接口、
配置文件定製init 和destory方法
@PostConstruct和@PreDestory
初始化順序爲:4---1---3
Spring註解
一、@Configuration:表示該類將聲明一個或多個@Bean方法,這些類由Spring 容器處理,再運行時生成bean定義和bean服務請求
二、@Bean:註解方法表示生成一個bean ,由容器管理,接受參數:name,initMethod和destoryMethod
三、@PreDestory和PostConstruct是bean的initMethod和destoryMethod的替代方法
四、@ComponentScan:和@Configuration一塊兒使用,指定掃描Spring組件的目錄
五、@Component:表示一個類是組件,它能夠被配置了@configuration 和@ConponmentScan的類檢測到
六、@PropertySource:提供一個聲明式的機制爲spring環境添加property source,和@Value 一塊兒使用
七、@Service
八、@Repository
九、@Autowired:用於實現bean的自動注入。常常和Spring @Qualifier配合使⽤用,解決同類型注⼊入致使的衝突
SpringMVC註解:
@Controller
Spring
事務管理理註釋
@Transactional:註釋⽤用於聲明事務管理理,常⽤用在Spring MVC Hibernate
Spring Security註釋
@EnableWebSecurity:和@Configuration配合使⽤用定義安全性配置,用在SpringSecurity模塊
Spring Boot註釋
@SpringBootApplication
@EnableAutoConfiguration
Spring IOC和DI
IOC 就是將對象的建立和管理交給spring 容器進行處理。
註解:
註解就是爲了說明Java中某一個部分的做用。
註解能夠用在哪一個部分是@Target註解起的做用。
註解能夠標註在ElementType枚舉類所指定的位置上。
@Document //該註解是否能夠出現再幫助文檔之中
@Retention(RetentionPolicy.RUNTIME) //該註解在Java、class和運行時都起做用
@Target(ElementType.ANNOTATION_TYPE) //該註解只能用在註解上
Public @Target(){
ElementType[] value();
}
用來解析註解的類成爲註解解析器
@Target
表示該註解能夠用在什麼地方,可能的ElementType參數有:
CONSTRUCTOR:構造器的聲明
FIELD:域聲明(包括enum實例)
LOCAL_VARIABLE:局部變量聲明
METHOD:方法聲明
PACKAGE:包聲明
PARAMETER:參數聲明
TYPE:類、接口(包括註解類型)或enum聲明
@Retention
表示須要在什麼級別保存該註解信息。可選的RetentionType參數包括:
SOURCE:註解將被編譯器拋棄
CLASS:註解將在class文件中可用,但會被JVM拋棄
RUNTIME:VM將在運行期間保留註解,所以能夠經過反射機制讀取註解的信息:
@Document
將註解包含在Javadoc中
@Inherited
容許子類繼承父類中的註解。
JPA
Jpa是現代化的數據持久化技術規範,是實現ORM的Java標準API,定義了供ORM提供商實現的接口
JPA=API+JPQL(Java Persistence Query Language)+ORM(Object/relation metadata)
Spring Data旨在提供統一的,易用的數據庫訪問技術
Spring data架構是高度模塊化的,每一個模塊都有獨立的貢獻者
Object mapping:將POJO轉換爲相應的數據格式,(MongoDB 的doucument,Redis 的property)
Template:資源轉換和異常轉換.
Repository:提供統一的查詢方式.
Spring Data JPA 適合用於快速建立基於JPA的用於CRUD操做的repository層,而且不用建立DAO
Spring Data JPA特性
建立倉庫repository
知識QueryDSL和JPA queries
支持batch加載,排序和動態查詢
支持xml和註解兩種方式
經過CrudRepository 減小CRUD代碼量
Spring Data JPA
項⽬目依賴:
1.數據庫驅動:postgresql,mysql
2.Spring框架核⼼心:spring-core, spring-context
3.Spring REST API:spring-webmvc, jackson-databind
4.Spring數據操做:spring-data-jpa, hibernate-entitymanage、
JPA VS Hibernate
Hibernate 是JPA規範的一個實現,設計JPA provider, 而spring Data JPA 是一個JPA數據訪問抽象
Spring Data JPA提供GenericDao(通用DAO)的定製實現,經過⽅方法名約定⾃自動⽣生成JPA查詢。Spring Data JPA經過擴展repositories(crudrepository, jparepository)實現DAO接⼝
Spring JDBC 是輕量級的,直接持久化的方式,目的在於實現原生的SQL查詢
Spring Data 是Spring 框架的一個子項目,他的目的簡化和不一樣類型數據庫之間的操做,包括關係和非關係型,Spring Data JPA是一個支持JPA的子項目,但不能單獨使用,須要和Hibernate等JPA 實現提供商結合使用。
SpringBoot
Spring Boot 是一個簡化啓動,開發和測試Spring應用的框架,SpringBoot將冗長的,經常使用的開發步驟,模板代碼和配置封裝爲「默認配置」。
Spring Boot=Spring框架+內嵌Http服務器+XML/Annotation配置
Spring Boot 概念
選用理由
簡化Java開發應用,單元測試和系統測試過程
提供默認配置,快速啓動。
提升生產力
優勢
很是容易地開發spring應用。
減小開始時間,提升生產力。
避免寫模板代碼,註釋和XML配置
方便和Spring生態系統集成,包含Spring JDBC,Spring ORM,SpringData等
提升嵌入式HTTP服務器,便於開發和測試。
提供CLI工具,經過命令行方式開發和測試Spring Boot應用
提供大量插件,更方便使用構建工具(Maven,Gradle)和內嵌地或內存數據庫。
Spring Boot 架構
四個核心組件和兩個輔助組成
Spring Boot Starter
主要職責將一組通用的,相關依賴組合成一個依賴。通常狀況下,Spring須要引入大量的依賴,而他們一般是固定的搭配,不方便構建文件管理。
優勢:
一、減小手動定義大量的依賴。
二、簡化構建依賴。
SpringBoot AutoConfigurator
Spring常常在開發中須要配置複雜的配置。
AutoConfigurator 的職責就是減小或不須要spring配置,它負責注入配置信息
例如SpringMVC spring-boot-starter-web 會啓動AutoConfigurator,自動生成XML/註釋信息實現views,views resolvers等配置。
@SpringBootApplication=@Configuration+@ComponentScan+@EnableAutoConfiration
Spring Boot CLI
該組件是用於運行和測試SpringBoot 應用的命令行軟件
利用CLI啓動SBA(以服務爲基礎的建構),它內部使用SpringBoot Starter 和Spring Boot AutoConfigurator解釋依賴病啓動應用。
Spring Boot Actuator
主要包含兩個功能:
提供SBA的管理終端
提供SBA 度量
Spring Initillzr(https://start.spring.io)
Spring Boot IDEs
Spring聲明式事務處理
Spring
聲明:針對的是程序員,程序員告訴spring容器,那些方法須要事務,那些方法不須要事務處理,spring 容器來作事務處理,
目的:讓Spring管理事務,開發者不在關注事務。
AOP
靜態代理的缺點:
若是一個系統中有100個Dao,則建立100個代理對象
靜態代理的重用性不強。
一個代理類只能對一個業務接口的實現類進行包裝,若是實現了多個業務接口的話就要定義不少實現類和代理類,代碼的重用性不。
動態代理模式:
產生的代理對象和目標對象實現了共同的接口
JDK代理。
代理對象是目標對象的子類
Spring:cglib 動態代理
Jdk的動態代理:
是jdk的API作到的,
代理對象是動態產生的。
cglib產生的代理類是目標類的子類
動態代理
JDK動態代理
JDK動態代理所用到的代理類在程序調用到代理類對象的時候才由JVM真正建立,JVM根據傳遞進來的業務實現類對象以及方法名,動態的建立了一個代理類的 class文件並被字節碼引擎執行,而後根據該代理對象進行方法調用。
JDK動態代理的代理對象在建立時,須要使用業務實現類所實現的接口做爲參數,若是業務實現類是沒有是現實接口而是直接定義業務方法的話,就沒法使用JDK動態代理了,而且,若是業務實現類中新增長了接口中沒有的方法,這些方法是沒法被代理的。
動態代理之Cglib代理
cglib 是針對類實現代理的,原理是對指定的業務類生成一個子類,並覆蓋其中業務方法實現代理。由於採用的是繼承,因此不能對final修飾的類進行代理。
靜態代理是經過在代碼中顯式的定義一個業務實現類一個代理,在代理類中對同名的業務方法進行包裝,用戶經過代理類調用被包裝過的業務方法。
JDK動態代理是經過接口中的方法名,在動態生成的代理類中調用業務實現類的同名方法。
Cglib動態代理是經過繼承業務類,生成的代理類是業務類的子類,經過重寫業務方法進行代理。
aop:
切面
事務、日誌、安全性框架、權限等都是切面
通知
切面中的方法就是通知
前置通知
在目標方法執行以前執行
不管目標方法是否拋出異常,都執行,由於在執行前置通知的時候,目標方法尚未執行,尚未遇到異常
後置通知
在目標方法執行之後
當目標方法遇到通到異常的時候,後置通知將不執行
後置通知也能夠接收目標方法的返回值
最終通知
在目標方法執行以後執行
不管目標方法是否拋出異常,都執行,至關於finally
異常通知
接收目標方法拋出的異常信息
環繞通知
若是不在環繞通知中調用ProceedingJoinPoint 的proceed 目標方法不會執行
環繞通知能夠控制目標方法的執行
目標類
切入點
只有符合切入點,才能讓通知和目標方法結合在一塊兒
織入:造成代理對象的方法的過程叫作織入。好處:事務、日誌、安全性框架,權限、目標方法之間徹底是鬆耦合的