美文网首页我爱编程
Spring专题1:一些术语

Spring专题1:一些术语

作者: 麦壳201602 | 来源:发表于2018-04-20 15:40 被阅读0次

-Spring

Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。

spring框架的一些特征:

  • 轻量,从大小与开销两方面而言spring都是轻量的。完整的spring框架可以在一个大小只有1MB多的JAR文件里发布

  • 控制反转,spring通过一种称作控制反转IOC的技术促进了低耦合

  • 面向切面,spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发

  • 容器,spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建

  • 框架,spring可以将简单的组件配置、组合成为复杂的应用。在spring中,应用对象被声明式地组合,典型地是在一个xml文件里

  • MVC,Spring的作用是整合,但不仅仅限于整合,Spring 框架可以被看做是一个企业解决方案级别的框架。客户端发送请求,服务器控制器(由DispatcherServlet实现的)完成请求的转发,控制器调用一个用于映射的类HandlerMapping,该类用于将请求映射到对应的处理器来处理请求。HandlerMapping 将请求映射到对应的处理器Controller(相当于Action)在Spring 当中如果写一些处理器组件,一般实现Controller 接口,在Controller 中就可以调用一些Service 或DAO 来进行数据操作 ModelAndView 用于存放从DAO 中取出的数据,还可以存放响应视图的一些数据。 如果想将处理结果返回给用户,那么在Spring 框架中还提供一个视图组件ViewResolver,该组件根据Controller 返回的标示,找到对应的视图,将响应response 返回给用户

所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持

-spring注解

常用注解,参考文章,请点击我。

-AOP

AOP相关知识,参考文章来源地址

AOP(Aspect Oriented Programming,面向切面编程),将程序运行过程分解为一个个的切面,对特定的切面(某个步骤或者阶段)进行提取,达到解耦各种不同逻辑代码。

OOP(Object Oriented Programming,面向对象编程),通过封装、继承将程序抽象为各个层次的对象,进而组合为模块或者程序,达到了软件工程中的重用性、灵活性、扩展性。程序的运行笼统地可以看为各层次对象之间的相互调用

AOP相关的关键字

  • Aspect(切面),程序运行过程中的某个的步骤或者阶段

  • Joinpoint(连接点),程序运行过程中可执行特定处理(增强处理)的点, 如异常处理。而在SpringAOP中,方法调用是连接点

  • Advice(通知、处理、增强处理),在符合的连接点进行的特定处理 (增强处理)

  • Pointcut(切入点),可切入进行增强处理的连接点。AOP核心之一就是如何用表达式来定义符合的切入点。在Spring中,默认使用AspectJ的切入点语法

  • Target(目标对象),被进行增强处理的对象

  • AOP代理,是一个重新封装了(增强处理 + 被代理对象的方法 )方法的代理对象

  • 织入(Weaving),增强处理切入目标对象以后,并获得代理对象(AOP代理)的这个过程

Spring AOP有两种实现方式:

  • 采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行

  • 采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码

AOP的主要应用场景
权限控制、异常处理、缓存、事务管理、日志、数据校验,etc

Spring AOP基于注解的零配置方式

  • 启动@AspectJ注解支持,旭在相应的容器内,加入如下片段
<beans  xmlns:aop="http://www.springframework.org/schema/aop" <!-- 必须有相应的XML Schema 配置 -->
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 

        <!-- 必须相应的容器内,启动@AspectJ支持,如对Springmvc的Contrller织入,  则应在Springmvc.xml中配置 -->
        <aop:aspectj-autoproxy />
        <!-- 扫描相应的包 -->
  • 定义切面bean
@Aspect
@Compement
public class Advice{

    /*定义切入点, 业务处理逻辑等等其他内容*/

}
  • 定义@Before、@After、@Around等增强处理
  /*定义切入点表达式*/
  /*配置匹配service包下所有的类、所有的方法*/
  @Pointcut("execution(* com.xxx.xxx.service.*.*(..))")
  public void pointCutExpress(){
  }
  • 定义处理方法
    @After("pointCutExpress()")
    public  void closeResource(){
        /*After注解,更适合于释放资源*/
    }

-IOC

Ioc—Inversion of Control,即控制反转,不是什么技术,而是一种设计思想。

控制反转是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。

IoC是如何做的呢?

有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像高圆圆,速度像贝尔,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。

Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

依赖注入

依赖注入的主要目的还是解耦,让spring去管理对象。比如在B中调用A,如果后面A修改频率高,那么B中就不断的维护代码。倘若使用spring托管,也就是Ioc。只需要在spring配置文件中,修改A的相关配置即可,这样,耦合降低了,提高了重用性。而且也解耦合,符合软件工程的思想。

在spring ioc中有三种依赖注入,分别是:
1、接口注入;
2、setter方法注入;
3、构造方法注入;

-Spring Boot 和 Spring Cloud的比较

  • spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务

  • spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring boot专注于快速、方便集成的单个个体,Spring Cloud是关注全局的服务治理框架;

  • spring boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring boot来实现;

  • Spring boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring boot,属于依赖的关系;

  • 相互关系:spring -> spring boot > spring cloud。

例如,某项目A是基于spring cloud,下面的子模块用户、商品、订单、物流、销售分别为独立的微服务。如果微服务内部相互调用,可以通过Eureka、或Zookeeper来实现。

-Eureka

做为服务注册中心,Eureka是Netflix开发的服务发现组件,本身是一个基于REST的服务。Spring Cloud将它集成在其子项目spring-cloud-netflix中,以实现Spring Cloud的服务发现功能。

代码结构示意图

Eureka的程序构成:

  • 是纯正的 servlet 应用,需构建成war包部署

  • 使用了 Jersey 框架实现自身的 RESTful HTTP接口

  • peer之间的同步与服务的注册全部通过 HTTP 协议实现

  • 定时任务(发送心跳、定时清理过期服务、节点同步等)通过 JDK 自带的 Timer 实现

  • 内存缓存使用Google的guava包实现

Eureka架构示意图

图中主要的组件:

  • Application Service 相当于本书中的服务提供者,Application Client相当于本书中的服务消费者;

  • Make Remote Call,可以简单理解为调用RESTful API;
    us-east-1c、us-east-1d等都是zone,它们都属于us-east-1这个region;

另外,Eureka包含两个组件,Eureka ServerEureka Client,它们的作用如下:

  • Eureka Client是一个Java客户端,用于简化与Eureka Server的交互;

  • Eureka Server提供服务发现的能力,各个微服务启动时,会通过Eureka Client向Eureka Server进行注册自己的信息(例如网络信息),Eureka Server会存储该服务的信息;

  • 微服务启动后,会周期性地向Eureka Server发送心跳(默认周期为30秒)以续约自己的信息。如果Eureka Server在一定时间内没有接收到某个微服务节点的心跳,Eureka Server将会注销该微服务节点(默认90秒);

  • 每个Eureka Server同时也是Eureka Client,多个Eureka Server之间通过复制的方式完成服务注册表的同步;

  • Eureka Client会缓存Eureka Server中的信息。即使所有的Eureka Server节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者。

-Zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

-BeanFactory与ApplicationContext

ApplicationContext是BeanFactory的子接口,也被称为应用上下文。BeanFactory提供了Spring的配置框架和基本功能,ApplicationContext则添加了更多企业级功能(如国际化的支持)。

ApplicationContext的另一重要优势在于当ApplicationContext容器初始化完成后,容器中所有的 singleton Bean 也都被实例化。也就是说当你需要使用singleton Bean 是,在应用中无需等待就可以用,而其他BeanFactory接口的实现类,则会延迟到调用 getBean()方法时构造,ApplicationContext的初始化时间会稍长些,调用getBean()是由于Bean已经构造完毕,速度会更快。因此大部分系统都使用ApplicationContext,而只在资源较少的情况下,才考虑使用BeanFactory。

相关文章

网友评论

    本文标题:Spring专题1:一些术语

    本文链接:https://www.haomeiwen.com/subject/ivdvkftx.html