Javaweb 後端框架總結

REST方法
2018112215252767.png
20181122152527925 (1).png
20181122152528749.png
20181122152527537.png
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

  1. @RequestMapping
  2. @PathVariable
  3. @RequestParam
  4. @ModelAttribute
  5. @RequestBody and @ResponseBody
  6. @RequestHeader and @ResponseHeader

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 目標方法不會執行

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

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

織入:造成代理對象的方法的過程叫作織入。好處:事務、日誌、安全性框架,權限、目標方法之間徹底是鬆耦合的

相關文章
相關標籤/搜索