SpringBoot学习总结(2)之SpringBoot环境搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jokeMqc/article/details/88951955

一、介绍

本章首先介绍如何安装Spring Boot 应用的开发环境,如果你是新手, 需要安装Java8 和Maven3 。Spring Boot 应用中Maven 是必备工具,因此这一章也会详细介绍Maven 工具的安装、配置和使用。最后会再次介绍Spring 的历史、IoC 容器和Spring 常用的注解。如果你已经熟悉Java 和Maven , 可以直接跳过这篇博客。

二、环境搭建

2.1检查Java 环境与安装Java

Spring Boot 2.0 需要安装IDK8 以上版本,可以先进入命令行,通过如下命令查看版本号:

java -version

如果安装了IDK8 ,应该有以下显示:

如果显示版本过低,则需要安装1.8 版本,如果报错:

则说明没有安装JDK , 也需要安装JDKl. 8 。这里具体的安装JDK的方法就不具体讲了。

2.2安装和配置Maven

Maven 是项目构建工具,能把项目抽象成POM (project object model ) , Maven 使用POM对项目进行构建、打包、文档化等操作。最重要的是解决了项目需要类库的依赖管理,简化了项目开发环境搭建的过程,使得我们开发一个从简单到大型的复杂项目变得很容易。

2.2.1 Mavne介绍

Maven 最初用于代替Apache Ant ,用来简化项目构建。Ant 构建项目采用的是指令方式,比如,构建项目的源码编译部分, Ant 提供了Javac 指令,以及一系列属性,包括源代码路径、依赖库的路径等。打包项目,比如打成war 包的时候,又提供了war 指令和附带的一系列属性,如编译好的class 的目录等。

Maven 采用了不同方式对项目构建进行抽象,比如源码位置总是在src/ main/java 中,配置文件则是在src/main/resources 中,编译好的类总是放在项目的target 目录下,总的来说, Maven实现了以下目标:

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

注意:仓库有多种,,位于Apache 的是中心仓库,是jar 发布存放的地方,可以通过http: //search.maven.org查询仓库和下载jar 文件。g/查询仓库和下载jar 文件。国内外也有大量镜像库,与中心仓库同步,比如国内的阿里云提供的Maven 镜像库。也可以用Sona type 创建一个私服,用来发布和存放库以提高下载速度或者存放公司私有的jar 。

无论依赖的jar 包来自哪个仓库,在开发人员本地, Maven 都会创建一个本地仓库来缓存已经下载的jar 包,以避免每次都去仓库下载。这个本地仓库位默认在用户目录下的.m2隐藏文件夹中。

Maven 的核心是pom . xrnl ,用XML 方式描述了项目模型, porn 通常有以下元素。

  • group Id :表示项目所属的组,通常是一个公司或者组织的名称,如org叩ringframework 。
  • artifactld :项目唯一的标识,比如,有spring-boot-starter-web 、spring-boot-devtools 、group Id 和artifactld 能唯一标识一个项目或者一个库,我们通常称之为项目坐标。
  • packaging : 项目的类型,常用的有jar 和war 两种, jar 表示项目会打包成一个jar 包,这是Spring Boot 的默认使用方式。
  • version : 项目的版本号,比如0β.1割AP SHOT 、1.5 . 2.RELEASE 。
  • model Version :代表porn 文件的Maven 的版本
  • dependencies :此元素下包含了多个dependency ,用来声明项目的依赖,这是porn 最核心的部分。
  • dependency : 包含在dependencies 中,用来声明项目的依赖,比如项目用到的MySQL驱动。
  • scope: scope 代表此类库与项目的关系,默认是compile ,也就是编译和打包都需要此类库。test 表示仅仅在单元测试的时候需要;provided 表示在编译阶段需要此类库,但打包阶段不需要,这是因为项目的目标环境己经提供了:runtime 表示在编译和打包的时候都不需要,但在运行的时候需要,比如某个指定的数据库驱动,编译和打包都不需要,但测试应用要连到数据库时就需要此数据库驱动。
  • build :此项在porn 中可边, build 包含了多个插件plugin,用来辅助项目构建。Maven与以往的Ant 等其他构建工具不同, Maven 己经约定俗成地包含了构建方法,插件可以在构建过程中影响项目的构建。

这里对于maven的介绍就到这里了,需要更深入的学习大家再参考一下其他的学习资料。

2.2.2Maven安装

idea上就已经自带了一个Maven 版本,但此版本较低,我们需要安装一个新的Maven 版本。

  • 从maven.apache.org 上下载最新的Maven 。
  • 直接解压,比如D: \apache\maven-3.3.9 。
  • 设置环境变量, Windows 系统类似如下:

MAVEN HOME = d : \apache\maven- 3 . 3 . 9,path =%MAVEN_H OME\bi n.......

2.2.3设置maven

使用Maven 的唯一问题可能就是网络问题, Maven 管理了依赖库, 默认情况下都是从中心仓库下载。中心仓库位于国外,下载速度非常慢,因此用Maven 构建项目的时候,经常卡在下载超时的过程中。幸好国内有几个镜像网站可以用,因此在配置Maven 时,应优先使用国内镜像网站, 当国内镜像仓库下载失败(因为有可能没有需要的依赖库)的时候,再切换到中心仓
库下载。

  • 进入Maven 的安装目录,进入conf 目录,编辑settings.xml 。
  • 找到mirrors 元素,添加如下仓库镜像:
<mirror>
		  <id>alimaven</id>
		  <name>aliyun maven</name>
		  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		  <mirrorOf>central</mirrorOf>        
	</mirror>

2.2.4在Idea中设置Maven

安装配置好Maven 后,需要在Idea中配置, 使用你下载配置好的Maven 而不是Idea自带的Maven ,打开idea的偏好setting。

3.SpringBoot核心技术

3.1Spring历史介绍

Java EE 是企业应用需求的体现,而Spring 则基于企业应用井非全是分布式这个前提,进一步简化了Java EE 的开发, Spring 奠基作者Rod Johnson 在2 003 年出版的《E乓pert One-On-OneJava EE Design and Development 》一书中首次提到Spring 框架,它并不像当时的Java EE 一样给了开发人员诸多限制。

2004 年, Spring 又推出了IoC (反向控制) 和AOP (面向切面编程),使得Spring 成为非常受欢迎的框架,开发企业应用的另外一种轻量级选择。

2005 年, Spring 成立了独立的公司,公司最早的名字是interface21 ,现在经过一系列并购,称为Pivotal ,全心全意维护S pring 框架,同时,大量的社区人员参与进来,商业公司也参与了Spring 的开发。

3.2Spring容器介绍

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

在Spring 框架中,如果你的Bean 是通过Spring 来管理的, Spring 容器则会帮你完成这些事情,开发人员需要做的仅仅是声明依赖关系,因此代码如下所示。

@Service
public CreditUserServiceimpl implements CreditUserService {
    public void addCredit(int score) {

    }
}

Bean 通过注解@ Service 声明为一个Spring 管理的Bean, Spring 容器会扫描classpath 下的所有类,找到带有@ Service 注解的UserService 类,并根据Spring 注解对其进行初始化和增强,如果发现此类属性creditUserService 也有注解@ Autowired ,则会从Spring 容器里查找一个己经初始化好的CreditUserService ,如果没有,则先初始化CreditUserService 。

3.3Spring 常用注解

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

3.5Spring AOP介绍

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

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

在没有AOP 之前,这些应用需求都需要程序员实现在上面所述的每个方法中。有了AOP ,应用可以在运行时刻动态地在方法调用前后“织入”一些公共代码,从而提供系统的公共服务。AOP 有如下术语。

  • Aspect : Aspect 声明类似于Java 中的类声明,在Aspect 中会包含一些Pointcut 及相应的Advice
  • Joint point : 表示在程序中明确定义的点,典型的包括方法调用、对类成员的访问, 以及异常处理程序块的执行等。Spring 中的Joint point 只支持方法调用。
  • Pointcut : 表示一组Joint point , 如方法名、参数类型、返回类型等,这些Joint point通过逻辑关系组合起来, 它定义了相应的Advice 将要发生的地方。简单理解Pointcut( 一种表达式) 一一用来判断在Joint point (方法调用)中执行Advice (操作)。
  • Advice: Advice 定义了在Pointcut 里面定义的程序点具体要做的操作, 它通过before 、around 、after ( return 、throw 、finally )来区别是在每个Joint point 之前、之后还是执行前后要调用的代码。

1.before : 在执行方法前调用Advice ,比如cache 功能可以在执行方法前先判断是否有缓存。

2.around : 在执行方法前后调用Advice , 这是Spring 框架和应用系统一种最为常用的方法。、

3.after : 在执行方法后调用Advice, after return 是方法正常返回后调用, after throw是方法抛出异常后调用。

4.finally : 方法调用后执行Advice , 无论是否抛出异常还是正常返回。

3.6在Springboot中使用AOP

首先需要在pom文件引入对应的依赖。

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

编写一个AOP配置类:

package com.mqc.aspectj;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;

@Aspect
@Configuration
public class AopConfig {
    @Around("@within(com.mqc.controller) ")
    public Object simpleAop(final ProceedingJoinPoint pjp){
        try {
            Object[] args = pjp.getArgs();
            System.out.print("args:"+ Arrays.asList(args));

            //调用原有的方法
            Object proceed = pjp.proceed();
            System.out.print("object:"+proceed);

            return proceed;
        }catch (Throwable e){

        }
        return null;
    }
}

对于这段代码,可以按照以下顺序理解:

( 1 ) @Configuration ,用于声明这是一个Spring 管理配置Be an ,这里是引起Spring 的注意,好比一群人里有一个人带了一个很高的帽子,更能吸引人注意。

(2) @Asp ec t ,声明了这是一个切面类。

(3) @Ar ound ,声明了一个表达式,描述要织入的目标的特性,比如@within 表示目标类型带有注解,其注解类型参数为org. spri ng framework. stereotype.Control !e r ,这意味着Sprin gControll er 方法在被调用的时候,都会执行@ Around 注解的方法,也就是s impleAop 。

( 4 ) s impl eAop 是用来织入的代码, 其参数称为Proce e din g JoinPoint , 如上述代码实例,
将调用的方法的参数取出来,打印到控制台。

(5 ) 调用pjp.proceed(),通常情况下,执行完切面代码,还需要继续执行应用代码, proceed()方法则会继续调用原有的业务逻辅,并将返回对象正常返回。

继续执行应用代码,有可能抛出异常,在切面里,我们不会处理这个异常, 直接抛出给调用者。

猜你喜欢

转载自blog.csdn.net/jokeMqc/article/details/88951955
今日推荐