Javaweb 後端框架總結

REST方法mysql

 

 

 

 

 

 

 

Spring 核心程序員

  IOC(Inversion of Controller-面向對象的一個準則,對象的控制(建立和管理)由容器或者框架來實現,而不是開發者直接調用,開發者只須要實現接口或者放入本身的類就能夠web

依賴注入(Dependency Injection DI)每一個方法都有一個獨立的對象,經過接口去調用其餘的對象,這些對象服務建立的時候才實現,是一種逆向的對象建立方式,Spring 中經過Constructor 或setter實現,實現了DI的庫叫作容器spring

面向切面編程(Aspect oriented programing,AOP)一種編程範式,容許橫跨應用功能的切面,用於表示同時用在多個函數上的功能。事務,日誌,權限等sql

 

Spring自動裝配數據庫

經過識別以定義的bean ,spring 的裝配機制容許自動解析bean之間的依賴,提供如下四種方法:編程

  1. 默認值,不會自動裝配,必須自定義依賴
  2. ByName:使用property name尋找bean
  3. byType:使用property type 尋找bean,多個同類型的bean會拋出異常
  4. constructor :使用構造函數參數類型尋找bean

Spring Bean :由spring容器建立的對象,叫作spring bean安全

Bean 提供五種做用域:服務器

  1. 每一個容器只建立該bean 的一個實例,防止數據不一致
  2. Prototype :每次請求都會建立新的實例
  3. Request:和prototype同樣,用於web應用每一個Http 請求都會建立一個實例
  4. Session 每一個Http 會話會建立一個新實例
  5. Global-session:爲Portlet 應⽤建立全局會話bean

 

 

Spring Bean生命週期:session

Spring提供四種方法控制生命週期:

  1. InitialzingBean and DisposableBean 回掉接口
  2. 用於特殊行爲的Aware接口、
  3. 配置文件定製init 和destory方法
  4. @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

2. @RequestMapping

3. @PathVariable

4. @RequestParam

5. @ModelAttribute

6. @RequestBody and @ResponseBody

7. @RequestHeader and @ResponseHeader

Spring

事務管理理註釋

@Transactional:註釋⽤用於聲明事務管理理,常⽤用在Spring MVC Hibernate

Spring Security註釋

@EnableWebSecurity:和@Configuration配合使⽤用定義安全性配置,用在SpringSecurity模塊

Spring Boot註釋

@SpringBootApplication

@EnableAutoConfiguration

 

 

Spring IOCDI

IOC 就是將對象的建立和管理交給spring 容器進行處理。

        

 

 

註解:

  1. 註解就是爲了說明Java中某一個部分的做用。
  2. 註解能夠用在哪一個部分是@Target註解起的做用。
  3. 註解能夠標註在ElementType枚舉類所指定的位置上。
  4. @Document   //該註解是否能夠出現再幫助文檔之中

@Retention(RetentionPolicy.RUNTIME)  //該註解在Java、class和運行時都起做用

@Target(ElementType.ANNOTATION_TYPE)  //該註解只能用在註解上

Public @Target(){

ElementType[] value();

}

  1. 用來解析註解的類成爲註解解析器

@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架構是高度模塊化的,每一個模塊都有獨立的貢獻者

  1. Object mapping:將POJO轉換爲相應的數據格式,(MongoDB 的doucument,Redis 的property)
  2. Template:資源轉換和異常轉換.
  3. Repository:提供統一的查詢方式.

Spring Data JPA 適合用於快速建立基於JPA的用於CRUD操做的repository層,而且不用建立DAO

Spring Data JPA特性

  1. 建立倉庫repository
  2. 知識QueryDSL和JPA queries
  3. 支持batch加載,排序和動態查詢
  4. 支持xml和註解兩種方式
  5. 經過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 概念

選用理由

  1. 簡化Java開發應用,單元測試和系統測試過程
  2. 提供默認配置,快速啓動。
  3. 提升生產力

優勢

  1. 很是容易地開發spring應用。
  2. 減小開始時間,提升生產力。
  3. 避免寫模板代碼,註釋和XML配置
  4. 方便和Spring生態系統集成,包含Spring JDBC,Spring ORM,SpringData等
  5. 提升嵌入式HTTP服務器,便於開發和測試。
  6. 提供CLI工具,經過命令行方式開發和測試Spring Boot應用
  7. 提供大量插件,更方便使用構建工具(Maven,Gradle)和內嵌地或內存數據庫。

Spring Boot 架構

 四個核心組件和兩個輔助組成

  1. Spring Boot Starter

主要職責將一組通用的,相關依賴組合成一個依賴。通常狀況下,Spring須要引入大量的依賴,而他們一般是固定的搭配,不方便構建文件管理。

  優勢:

一、減小手動定義大量的依賴。

二、簡化構建依賴。

 

  1. SpringBoot AutoConfigurator

Spring常常在開發中須要配置複雜的配置。

AutoConfigurator 的職責就是減小或不須要spring配置,它負責注入配置信息

例如SpringMVC spring-boot-starter-web 會啓動AutoConfigurator,自動生成XML/註釋信息實現views,views resolvers等配置。

@SpringBootApplication=@Configuration+@ComponentScan+@EnableAutoConfiration

  1. Spring Boot CLI

該組件是用於運行和測試SpringBoot 應用的命令行軟件

利用CLI啓動SBA(以服務爲基礎的建構),它內部使用SpringBoot Starter 和Spring Boot AutoConfigurator解釋依賴病啓動應用。

 

  1. Spring Boot Actuator

 主要包含兩個功能:

  提供SBA的管理終端

   提供SBA 度量

  1. Spring Initillzr(https://start.spring.io)

 

  1. Spring Boot IDEs

 

 

 

 

 

Spring聲明式事務處理

Spring

  聲明:針對的是程序員,程序員告訴spring容器,那些方法須要事務,那些方法不須要事務處理,spring 容器來作事務處理,

目的:讓Spring管理事務,開發者不在關注事務。

 

 

AOP

靜態代理的缺點:

  1. 若是一個系統中有100個Dao,則建立100個代理對象
  2. 靜態代理的重用性不強。
  3. 一個代理類只能對一個業務接口的實現類進行包裝,若是實現了多個業務接口的話就要定義不少實現類和代理類,代碼的重用性不。

動態代理模式:

  1. 產生的代理對象和目標對象實現了共同的接口

JDK代理。

  1. 代理對象是目標對象的子類

Spring:cglib 動態代理

Jdk的動態代理:

  1. 是jdk的API作到的,
  2. 代理對象是動態產生的。

cglib產生的代理類是目標類的子類

 

動態代理

  1. JDK動態代理

JDK動態代理所用到的代理類在程序調用到代理類對象的時候才由JVM真正建立,JVM根據傳遞進來的業務實現類對象以及方法名,動態的建立了一個代理類的 class文件並被字節碼引擎執行,而後根據該代理對象進行方法調用。

JDK動態代理的代理對象在建立時,須要使用業務實現類所實現的接口做爲參數,若是業務實現類是沒有是現實接口而是直接定義業務方法的話,就沒法使用JDK動態代理了,而且,若是業務實現類中新增長了接口中沒有的方法,這些方法是沒法被代理的。

  1. 動態代理之Cglib代理

cglib 是針對類實現代理的,原理是對指定的業務類生成一個子類,並覆蓋其中業務方法實現代理。由於採用的是繼承,因此不能對final修飾的類進行代理。

靜態代理是經過在代碼中顯式的定義一個業務實現類一個代理,在代理類中對同名的業務方法進行包裝,用戶經過代理類調用被包裝過的業務方法。

JDK動態代理是經過接口中的方法名,在動態生成的代理類中調用業務實現類的同名方法。

Cglib動態代理是經過繼承業務類,生成的代理類是業務類的子類,經過重寫業務方法進行代理。

 

 

aop:

  1. 切面

事務、日誌、安全性框架、權限等都是切面

  1. 通知

切面中的方法就是通知

  1. 前置通知

在目標方法執行以前執行

不管目標方法是否拋出異常,都執行,由於在執行前置通知的時候,目標方法尚未執行,尚未遇到異常

  1. 後置通知

在目標方法執行之後

當目標方法遇到通到異常的時候,後置通知將不執行

後置通知也能夠接收目標方法的返回值

  1. 最終通知

在目標方法執行以後執行

不管目標方法是否拋出異常,都執行,至關於finally

  1. 異常通知

接收目標方法拋出的異常信息

  1. 環繞通知

若是不在環繞通知中調用ProceedingJoinPoint 的proceed 目標方法不會執行

環繞通知能夠控制目標方法的執行

  1. 目標類
  2. 切入點

只有符合切入點,才能讓通知和目標方法結合在一塊兒

  1. 織入:造成代理對象的方法的過程叫作織入。

好處:事務、日誌、安全性框架,權限、目標方法之間徹底是鬆耦合的