Spring Boot 2精髓 - (2) 基础

spring boot

开发工具

  • JDK8+

  • Maven

    • 使构建项目变得很容易, Maven 屏蔽了构建的复杂过程。比如,你只需要输入 maven package 就可以构建整个 Java 项目。
    • 统一了构建项目的方式,不同人、不同公司的项目都有同样的描述项目和构建项目的 方式, Maven 通过 pom.xml 来描述项目,井提供一系列插件来构建项目 。只要熟悉了 Maven,就熟悉了所有项目的构建方式 。
    • 提出了一套开发项目的最佳实践,而不用每个项目都有不同结构和构建方式,比如源 代码在 src/main/iava 中,测试代码则在 src/test/iava 中,项目需要的配置文件则放在 src/main/resources 中。
    • 包含不同环境项目的构建方式。
    • 解决了类库依赖的问题,只需要声明使用的类库, Maven 会自动从仓库下载依赖的 jar包,并能协助你管理 jar包之间的冲突。

    pom.xrnl,用 XML 方式描述了项目模型, porn通常有以下元素:

    • groupId: 表示项目所属的组,通常是一个公司或者组织的名称,如 org叩ringframework。
    • artifactld: 项目唯一的标识,比如,有 spring-boot-starter-webspring-boot-devtools、groupId 和 artifactld 能唯一标识一个项目或者一个库,我们通常称之为项目坐标 。
    • packaging: 项目的类型,常用的有jar和 war两种, jar表示项目会打包成一个jar包, 这是 SpringBoot的默认使用方式。
    • version: 项目的版本号 ,比如 0β.1割 APSHOT、 1.5.2.RELEASE。
      • SNAPSHOT 表示开发中的版本,会修复 bug 和添加新 功能
      • RELEASE 表示的是一个正式发布版
      • M1,M2(M 指 里程碑 , 即将发布)
      • RC(Release Candidate,发布候选)
      • GA(general availability,基本可用版本)
        SNAPSHOT<ml<m2...<RC<GA<Realease
    • modelVersion: 代表 pom 文件的 Maven 的版本,如写作的时候 Maven 的 modelVersion是 4.0.0。
    • dependencies:此元素下包含了多个 dependency,用来声明项目 的依赖,这是 porn 最 核心的部分。
    • dependency: 包含在 dependencies 中,用 来声 明项目的依赖,比如项目用到的 MySQL 驱动。
    • scope: scope 代表此类库与项目的关系
      • compile 默认,编译和打包都需要此 类库
      • test 表示仅仅在单元测试的时候需要
      • provided 表示在编译阶段需要此类库,但 打包阶段不需要,这是因为项目的目标环境己经提供了
      • runtime表示在编译和打包的 时候都不需要,但在运行的时候需要,比如某个指定的数据库驱动,编译和打包都不 需要 ,但测试应用要连到数据库 时就 需要此数据库驱动 。
    • build: 此项在 pom 中可边, build包含了多个插件 plugin,用来辅助项目构建

Maven 常用命令

  • mvn compile: 编译 Maven 工程

  • mvn package: 编译井打包工程, 根据 pom.xml 中元素 packaging是jar还是 war进行打包

  • mvn install:打包井安装到本地仓库

  • mvn deploy: 同 install,但打包井安装到远程仓库

  • mvn clean: 删除 target 目录

Spring 核心技术

Spring 容器

Spring IoC

IoC (Inversion ofControl,反向控制〉原则,更为形象的称呼是 DI (dependency injection,依赖注入)。相对于Bean直接构造依赖的对象, Spring框架则根据Bean之间的依赖关系创建对象,并注入到 Bean 中。

Spring 常用注解

  • Controller: 声明此类是一个 MVC 类,通常与@RequestMapping 一起使用
  • Service: 声 明此类是一个业务处理类,通常与@Transactional 一起配合使用
  • Repository: 声明此类是一个数据库或者其他 NoSQL 出问类。
  • RestController: 同 Controller, 用于 REST 服务。
  • Component:声明此类是一个 Spring管理的类,通常用于无法用上述注解描述的 Spring管理类。
  • Configuration: 声明此类是 一个配置类,通常与注解@Bean 配合使用。
  • Bean: 作用在方法上,声明该方法执行的返回结果是一个 Spring 容器管理的 Bean。

Spring 负责实例化 Bean, 开发者可 以提供一系列回调函数 ,用于进一步配置 Bean, 包括
@PostConstruct 注解和@PreDestory 注解。

  • 当 Bean 被容器初始化后,会调用@PostConstruct 的注解方法
  • 在容器被销毁之前,调用被 @PreDestory 注解的方法

引用Bean:

  1. 使用注解@Qualifier来引用, 根据名字
  2. 过@Autowired 声明对其他 Bean 的引用, 作用于属性或者构造函数参数,甚至是方法调用参数上。

Spring AOP

AOP (Aspect-Oriented Programming,面向切面编程)提供了另外一种思路来实现应用系统 的公共服务 。

  • 每个业务方法调用的权限管理: 在用户调用方法前判断用户是否有权调用此方法
  • 每个方法调用的审计: 记录谁调用了什么业务方法,传入参数是什么,操作是否成功。
  • 数据库事务的管理: 在执行数据库一系列操作前,先开启事务,在执行完后提交事务: 如果执行出错,则回滚事务。
  • 缓存: 对业务方法返回的数据进行缓存,下次调用的时候,如果参数未变,直接从缓 存中获取数据,而不再调取应用方法。

AOP 有如下术语:

  • Aspect: Aspect声明类似于 Java 中的类声明,在 Aspect 中会包含一些 Pointcut及相应 的 Advice
  • Jointpoint: 表示在程序中明确定义的点,典型的包括方法调用、对类成员的访问, 以及异常处理程序块的执行等。 Spring 中的 Jointpoint 只支持方法调用。
  • Pointcut: 表示一组 Joint point, 如方法名、参数类型、返回类型等,这些 Joint point 通过逻辑关系组合起来, 它定义了相应的 Advice将要发生的地方。简单理解 Pointcut(一种表达式) 一一用来判断在 Jointpoint (方法调用)中执行 Advice (操作)。
  • Advice: Advice 定义了在 Pointcut里面定义的程序点具体要做的操作, 它通过 before、 around、 after ( return、 throw、 finally)来区 别 是在每个 Joint point 之前 、 之后还是执 行前后要调用的代码。
    • before: 在执行方法前调用 Advice,比如 cache功能可以在执行方法前先判断是否 有缓存。
    • around: 在执行方法前后调用 Advice, 这是 Spring 框架和应用系统一种最为常用 的方法,
    • after: 在执行方法后调用 Advice, after return是方法正常返回后调用 , after throw 是方法抛出异常后调用 。
    • finally: 方法调用后执行 Advice, 无论是否抛出异常还是正常返回
  • AOPproxy: AOPProxy也是Java对象,由AOP框架创建, 用来完成上述的动作, AOP对象通常可以通过 JDKd归amicproxy完成,或者使用 CGLib完成。
  • Weaving: 实现上述切面编程的代码织入, 可以在编译时刻(通过 AspectJ compiler),也可以在运行时刻, Spring和其他大多数Java框架都是在运行时刻生成代理。

spring-boot-starter-aop

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2021 朝着牛逼的道路一路狂奔 All Rights Reserved.

访客数 : | 访问量 :