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 目标方法不会执行

环绕通知能够控制目标方法的执行

目标类
切入点
只有符合切入点,才能让通知和目标方法结合在一块儿

织入:造成代理对象的方法的过程叫作织入。好处:事务、日志、安全性框架,权限、目标方法之间彻底是松耦合的

相关文章
相关标签/搜索