项目结构介绍
1.Spring Boot的基础结构共三个文件:
- src/main/java程序开发以及主程序入口
- src/main/resources配置文件
- src/test/java测试程序
另外,SpringBoot建议的目录结构:
root package结构:com.aiweiyi.lt.demo
如:com.aiweiyi.ch01-sb目录下:
main→java目录:
- Application.java: 建议放到更目录下main,是项目的启动类,主要用于做一些框架配置
- comm(config):目录建议放置公共类,如全局的配置文件、工具类等 如:utils、tool
- repository(mapper):主要是数据库访问层代码 如DAO层
- service:主要是业务逻辑层代码
- web主要是表示层代码
main→resources目录:
- static:目录存放web访问的静态资源,如js、css、图片等
- templates:目录存放页面模板
- application.properties:存放项目的配置信息
test:目录存放单元测试的代码
pom.xml:用于配置项目依赖包,以及其他配置
也可以根据默认设置可以省去一些不必要的设置,
也可以根据一些需求进行配置进行修改。
pom包介绍
pom.xml文件主要描述了项目包的依赖和项目构建时的配置,在默认的pom.xml包中分为四大(块)部分:
- 第一部分为项目的描述信息:
<!--第一部分为项目的描述信息-->
<groupId>com.aiweiyi.lt</groupId><!--groupId:公司域名-->
<artifactId>demo</artifactId><!--artifactId:项目名称-->
<version>0.0.1-SNAPSHOT</version><!--version项目版本号-->
<name>demo</name><!--name:项目名称-->
<description>Demo project for Spring Boot</description><!--description:项目描述-->
- groupId:公司域名
- artifactId:项目名称
- version项目版本号
- name:项目名称
- description:项目描述
- 第二部分为项目的依赖配置描述信息:
<!-- 第二部分为项目的依赖配置描述信息-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.15.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId> org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<!-- dependencies:标签内配置项目苏鸥需要的依赖包 -->
<!--parent:标签内配置Spring Boot父级版本spring-boot-starter-parent支持项目的父子结构-->
- groupId:公司域名
- artifactId:项目名称
- version项目版本号
- name:项目名称
- relativePath:设定一个空值将始终从仓库中获取,不从本地路径获取
- parent:标签内配置Spring Boot 父级版本 spring-boot-starter-parent,Maven支持项目的父子结构,引入父级后悔默认继承父类的配置。
- dependencies:标签内配置项目所需要的依赖包,Spring Boot体系内的依赖组件不需要填写具体版本号,spring-boot-starter-parent 维护了体系内所有依赖包的版本信息。
- 本项目的依赖除了我们自己勾选的spring-boot-starter-web外,还默认包括了spring-boot-starter-test,spring-boot=starter-test是Spring Boot提供测试的工具包,内置了多种测试工具,方便我们在项目中做单元测试、集成测试。
- 第三部分为构建时需要的公共变量:
<!-- 第三部分为构建时需要的公共变量-->
<properties>
<java.version>1.8</java.version><!--指定了JDK的版本 -->
<!-- 通常会指定字符编码-->
</properties>
- 此处默认只指定了项目使用的JDK版本,我们通常还会指定使用的字符编码等。
- 第四部分构建配置:
<!-- 第四部分构建配置-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
-
使用Maven构建Spring Boot项目必须依赖于spring-boot-maven-pligin组件,spring-boot-maven-plugin能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Maven操作的可能,spring-boot-Maven-plugin能够将Spring Boot应用打包为可执行的jar或war文件,然后以简单的方式运行Spring Boot应用。
-
以上即为pom.xml文件基础内容,几乎所有的Spring Boot项目都会用到以上配置信息。
这样一个简单的Spring Boot项目就搭建好啦。
编写代码:实现一个HelloWorld
俗话说没有写过一个HelloWorld的程序猿不是一个合格的程序猿
我们首先,先使用Spring Boot实现一个HelloWorld
在com.aiweiyi.lt.demo.service包下创建一个DemoService接口:
package com.aiweiyi.lt.demo.service;
/**
* DemoService
* 接口
* 业务逻辑层
*/
public interface DemoService {
public String sayHello();
}
在com.aiweiyi.lt.demo.service.impl包下创建一个DemoServiceImpl实现类:
package com.aiweiyi.lt.demo.service.impl;
import com.aiweiyi.lt.demo.service.DemoService;
import org.springframework.stereotype.Service;
/**
* DemoServiceImpl
* 实现DemoService接口
* 实现类
*/
@Service("demoService")
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello() {
return "Hello World";
}
}
在com.aiweiyi.lt.demo.service.controller包下创建一个HelloController控制器:
package com.aiweiyi.lt.demo.controller;
import com.aiweiyi.lt.demo.pojo.DemoInfo;
import com.aiweiyi.lt.demo.service.DemoService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* HelloController
* 控制器
*/
@RestController
public class HelloController {
@Resource
private DemoInfo demoInfo;
// @Autowired
@Resource //建议使用@Resource注解
private DemoService demoService;
@RequestMapping("/hello")//@RequestMapping 都被HTTP Request映射到指定的映射路径中如:/Hello
public String hello() {
String msg = demoService.sayHello();
return msg;
}
}
- @RestController的意思是Controller里面的方法都已JSON格式输出,不需要有其他额外的配置,如果配置@Controller,代表输出内容到页面,现在我们不需要输出内容在页面了,都是以响应的方式接收数据。
- @RequestMapping("/hello")提供路由信息,"/hello"路径Http Request 都会被映射到hello()方法上进行处理。
运行访问:
右击运行启动项
package com.aiweiyi.lt.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
这时候说明我们测试成功了,Hello World已经成功输出出来了。
单元测试
针对于测试我们使用Junit使用的几条建议:
- 测试方法上必须使用@Test进行修饰
- 测试方法必须使用public void 进行修饰,不能带任何的参数
- 新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开
- 测试类所在的包名应该和被测试类所在的包名保持一致
- 测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
- 测试类使用Tester作为类名的后缀(不是必须)
- 测试方法使用test作为方法名的后缀(不是必须)
测试使用断言测试比较好
测试的代码:
@Test
public void contextLoads() {
String str = demoService.sayHello();
Assert.assertNotNull(str);//断言,是否为空,Null
Assert.assertTrue(str.equals("Hello World"));//断言,判断返回的值是否为Hello World
System.out.println(str);
}
Spring Boot的核心
Spring Boot指在通过最少的Spring前期配置使您基金快启动运行,它的核心设计是:约定优于配置。
约定优于配置
那什么是约定优于配置呢?
约定优于配置(Convention Over Configuration),也称按约定编程,是一种软件设计范式,指在减少软件开发人员需做决定的数量、获得简单的好处,而不失灵活性。
通俗的来讲,就是指开发人员仅需规定应用中不符约定的部分,我们实体(模型)类定义的是User类,那我们数据库中对应的就会默认命名为user,只有在偏离这一约定时,该命名为user_info,这是我们CIA需写有关这个名字的配置。
我们可以按照整体思路来设想,我们约定Controller(控制层)就是Web请求层可以省略MVC的配置,我们约定在Service结尾的类自动注入事务,就可以省略了Spring的(面向切面)切面事务配置。
在Spring体系讲约定优于配置的思想展现的淋漓尽致,小到配置文件、中间件的默认配置,大到内置容器、首页哪个台中的各种Starter,无不遵循此设计规则,Spring Boot 鼓励个软件组织方创建自己的Starter,创建Starter的核心功能,在启动的时候进行自动装配,属性默认化配置。
Spring Boot
Spring Boot可以说是简化的配置和总舵的Starters才让Spring Boot变得简单,易用、快速上手,也可以说正是约定优于配置的思想彻底落地才让Spring Boot 走向辉煌,Spring Boot约定优于配置的思想让Spring Boot项目非常容易上手,让编程更加的简单,其实编程本该很简单,简单才是编程的没。
什么是Starters启动器
Starter可以理解成为一个启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找一些相关的代码和依赖包,假设你需要访问数据库就需要使用Spring Data JPA即可,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了。
Spring Boot Starter基于约定优于配置的理念来设计,Spring Boot Starter中有俩个核心组件:自动配置代码和提供自动配置模块及其有用的依赖,也就是说我们项目中需要引入某个Starter,一般有默认配置好的,根据自身的需求去配置即可。
Spring Boot拥有强大融合社区开源软件的能力,在没有Spring Boot之前我们都需要按照没有开源软件的特性,将对应组件包集成到我们的开发项目中,因为每个组件的设计理想和其他的团队都不一致,因此就会导致很多的一些编码或项目风格不一致。
spring就等于说一个全家桶,有各种类型的spring,把一些层、组件拆分为模块来管理,以便互相依赖服用。
总结一下Spring Boot:
Spring Boot是一种对SSM(Spring+SpringMVC+MyBatis)框架的一种简化,不需要我们建立过多的一些配置文件,还有一些spring的声明式事务还有Spring的核心:SpringIOC(控制反转也称依赖注入)和SpringAOP(面向切面),省略了过多繁琐的配置文件,对于我们程序猿来说就是捡到宝了,反正就易上手,一学就会,一看就懂。
希望俺能够帮助到我的真果粒们!!!