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之間的依賴,提供如下四種方法:編程
Spring Bean :由spring容器建立的對象,叫作spring bean安全
Bean 提供五種做用域:服務器
Spring Bean生命週期:session
Spring提供四種方法控制生命週期:
初始化順序爲: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 IOC和DI
IOC 就是將對象的建立和管理交給spring 容器進行處理。
註解:
@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架構是高度模塊化的,每一個模塊都有獨立的貢獻者
Spring Data JPA 適合用於快速建立基於JPA的用於CRUD操做的repository層,而且不用建立DAO
Spring Data JPA特性
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 概念
選用理由
優勢
Spring Boot 架構
四個核心組件和兩個輔助組成
主要職責將一組通用的,相關依賴組合成一個依賴。通常狀況下,Spring須要引入大量的依賴,而他們一般是固定的搭配,不方便構建文件管理。
優勢:
一、減小手動定義大量的依賴。
二、簡化構建依賴。
Spring常常在開發中須要配置複雜的配置。
AutoConfigurator 的職責就是減小或不須要spring配置,它負責注入配置信息
例如SpringMVC spring-boot-starter-web 會啓動AutoConfigurator,自動生成XML/註釋信息實現views,views resolvers等配置。
@SpringBootApplication=@Configuration+@ComponentScan+@EnableAutoConfiration
該組件是用於運行和測試SpringBoot 應用的命令行軟件
利用CLI啓動SBA(以服務爲基礎的建構),它內部使用SpringBoot Starter 和Spring Boot AutoConfigurator解釋依賴病啓動應用。
主要包含兩個功能:
提供SBA的管理終端
提供SBA 度量
Spring聲明式事務處理
Spring
聲明:針對的是程序員,程序員告訴spring容器,那些方法須要事務,那些方法不須要事務處理,spring 容器來作事務處理,
目的:讓Spring管理事務,開發者不在關注事務。
AOP
靜態代理的缺點:
動態代理模式:
JDK代理。
Spring:cglib 動態代理
Jdk的動態代理:
cglib產生的代理類是目標類的子類
動態代理
JDK動態代理所用到的代理類在程序調用到代理類對象的時候才由JVM真正建立,JVM根據傳遞進來的業務實現類對象以及方法名,動態的建立了一個代理類的 class文件並被字節碼引擎執行,而後根據該代理對象進行方法調用。
JDK動態代理的代理對象在建立時,須要使用業務實現類所實現的接口做爲參數,若是業務實現類是沒有是現實接口而是直接定義業務方法的話,就沒法使用JDK動態代理了,而且,若是業務實現類中新增長了接口中沒有的方法,這些方法是沒法被代理的。
cglib 是針對類實現代理的,原理是對指定的業務類生成一個子類,並覆蓋其中業務方法實現代理。由於採用的是繼承,因此不能對final修飾的類進行代理。
靜態代理是經過在代碼中顯式的定義一個業務實現類一個代理,在代理類中對同名的業務方法進行包裝,用戶經過代理類調用被包裝過的業務方法。
JDK動態代理是經過接口中的方法名,在動態生成的代理類中調用業務實現類的同名方法。
Cglib動態代理是經過繼承業務類,生成的代理類是業務類的子類,經過重寫業務方法進行代理。
aop:
事務、日誌、安全性框架、權限等都是切面
切面中的方法就是通知
在目標方法執行以前執行
不管目標方法是否拋出異常,都執行,由於在執行前置通知的時候,目標方法尚未執行,尚未遇到異常
在目標方法執行之後
當目標方法遇到通到異常的時候,後置通知將不執行
後置通知也能夠接收目標方法的返回值
在目標方法執行以後執行
不管目標方法是否拋出異常,都執行,至關於finally
接收目標方法拋出的異常信息
若是不在環繞通知中調用ProceedingJoinPoint 的proceed 目標方法不會執行
環繞通知能夠控制目標方法的執行
只有符合切入點,才能讓通知和目標方法結合在一塊兒
好處:事務、日誌、安全性框架,權限、目標方法之間徹底是鬆耦合的