web后端框架

REST方法

Spring 核心

  IOC(Inversion of Controller)-面向对象的一个准则,对象的控制(创建和管理)由容器或者框架来实现,而不是开发者直接调用,开发者只需要实现接口或者放入自己的类就可以

依赖注入(Dependency Injection DI)每个方法都有一个独立的对象,通过接口去调用其他的对象,这些对象服务创建的时候才实现,是一种逆向的对象创建方式,Spring 中通过Constructor 或setter实现,实现了DI的库叫做容器

面向切面编程(Aspect oriented programing,AOP)一种编程范式,允许横跨应用功能的切面,用于表示同时用在多个函数上的功能。事务,日志,权限等

Spring自动装配

通过识别以定义的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生命周期:

Spring提供四种方法控制生命周期:

InitialzingBean and DisposableBean 回掉接口
用于特殊行为的Aware接口、
配置文件定制init 和destory方法
@PostConstruct和@PreDestory
初始化顺序为:4---1---3

Spring注解

1、@Configuration:表示该类将声明一个或多个@Bean方法,这些类由Spring 容器处理,再运行时生成bean定义和bean服务请求

2、@Bean:注解方法表示生成一个bean ,由容器管理,接受参数:name,initMethod和destoryMethod

3、@PreDestory和PostConstruct是bean的initMethod和destoryMethod的替代方法

4、@ComponentScan:和@Configuration一起使用,指定扫描Spring组件的目录

5、@Component:表示一个类是组件,它可以被配置了@configuration 和@ConponmentScan的类检测到

6、@PropertySource:提供一个声明式的机制为spring环境添加property source,和@Value 一起使用

7、@Service

8、@Repository

9、@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 容器进行处理。

        

注解:

注解就是为了说明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需要引入大量的依赖,而他们通常是固定的搭配,不方便构建文件管理。

  优点:

1、减少手动定义大量的依赖。

2、简化构建依赖。

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

环绕通知可以控制目标方法的执行

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

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

 
————————————————
版权声明:本文为CSDN博主「ddhsea」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ddhsea/article/details/84340150

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值