开发小技巧
1. Lombok
✔简化JavaBean开发,自动帮Bean生成getter或者setter登方法,需要安装插件
✔idea中搜索安装lombok插件

✔pom.xml中添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
@Data t自动添加getter或者setter方法
@ToString 自动添加toString()方法
@NoArgsConstructor 自动添加无参构造器
@AllArgsConstructor 自动添加全参构造器
@EqualsAndHashCode 重写equals和hashCode方法


2. dev-tools热部署
✔添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
项目或者页面修改以后:Ctrl+F9(启动idea重新编译项目);
✔插件JRebel (付费)
3.复制工程
- 在工作空间中复制对应工程,并修改工程名称
- 删除与Idea相关配置文件,仅保留src目录与pom.xml文件
- 修改pom.xml文件中的artifactId与新工程/模块名相同
- 删除name标签(可选)
- 保留备份工程供后期使用
一: 快速创建SpringBoot工程
1. SpringBoot入门程序开发
SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程
- 开发SpringBoot程序可以根据向导进行联网快速制作
- SpringBoot程序需要基于JDK8进行制作
- SpringBoot程序中需要使用何种功能通过勾选选择技术
- 运行SpringBoot程序通过运行Application程序入口进行
①:创建新模块,选择Spring Initializr,并配置模块相关基础信息

②:选择当前模块需要使用的技术集

③:开发控制器类
//Rest模式
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping
public String getById(){
System.out.println("springboot is running...");
return "springboot is running...";
}
}
④:运行自动生成的Application类

a. SpringBoot和SSM对比
最简SpringBoot程序所包含的基础文件
pom.xml文件
Application类
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
</parent>
<groupId>com.xiaoyang</groupId>
<artifactId>springboot-01-quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
Application类
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

b. 创建SpringBoot工程的四种方式
- 基于Idea创建SpringBoot工程
- 基于官网创建SpringBoot工程
- 基于阿里云创建SpringBoot工程
- 手工创建Maven工程修改为SpringBoot工程
✔基于官网创建SpringBoot工程
地址:官网地址
- 打开SpringBoot官网,选择Quickstart Your Project
- 创建工程,并保存项目
- 解压项目,通过IDE导入项目

✔基于阿里云创建SpringBoot工程
地址:https://start.aliyun.com
- 选择start来源为自定义URL
- 输入阿里云start地址
- 创建项目

阿里云提供的坐标版本较低,如果需要使用高版本,进入工程后手工切换SpringBoot版本
阿里云提供的工程模板与Spring官网提供的工程模板略有不同
Spring官网服务器部署在国外,所以使用阿里云服务器部署项目会更快。
✔手工创建Maven工程修改为SpringBoot工程
- 创建普通Maven工程
- 继承spring-boot-starter-parent
- 添加依赖spring-boot-starter-web
- 制作引导类Application
手工导入坐标
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
</parent>
<groupId>com.xiaoyang</groupId>
<artifactId>springboot-01-quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
手工制作引导类
@SpringBootApplication
public class ReggieApplication {
public static void main(String[] args) {
SpringApplication.run(ReggieApplication.class,args);
}
}
c. 隐藏指定文件/文件夹

Idea中隐藏指定文件或指定类型文件
- Setting → File Types → Ignored Files and Folders
- 输入要隐藏的文件名,支持*号通配符
- 回车确认添加


2. SpringBoot程序工作原理
SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程
✔Spring程序缺点
依赖设置繁琐
配置繁琐
✔SpringBoot程序优点
起步依赖(简化依赖配置)
自动配置(简化常用工程相关配置)
辅助功能(内置服务器,……)
- parent
- starter
- 引导类
- 内嵌tomcat
5.自动配置
a:parent 解决版本管理问题
- 开发SpringBoot程序要继承spring-boot-starter-parent
- spring-boot-starter-parent中定义了若干个依赖管理
- 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
- 继承parent的形式也可以采用引入依赖的形式实现效果
- 项目中的pom.xml中继承了一个坐标
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
</parent>
- 打开后可以查阅到其中又继承了一个坐标
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.4</version>
</parent>
- 这个坐标中定义了两组信息,第一组是各式各样的依赖版本号属性,下面列出依赖版本属性的局部,可以看的出来,定义了若干个技术的依赖版本号

- 第二组是各式各样的的依赖坐标信息,可以看出依赖坐标定义中没有具体的依赖版本号,而是引用了第一组信息中定义的依赖版本属性值

b:starter 解决配置繁琐问题
✔SpringBoot关注到开发者在实际开发时,对于依赖坐标的使用往往都有一些固定的组合方式,比如使用spring-webmvc就一定要使用spring-web。每次都要固定搭配着写,非常繁琐,而且格式固定,没有任何技术含量。
✔SpringBoot一看这种情况,看来需要给开发者带来一些帮助了。安排,把所有的技术使用的固定搭配格式都给开发出来,以后你用某个技术,就不用一次写一堆依赖了,还容易写错,我给你做一个东西,代表一堆东西,开发者使用的时候,直接用我做好的这个东西就好了,对于这样的固定技术搭配,SpringBoot给它起了个名字叫做starter。
✔starter定义了使用某种技术时对于依赖的固定搭配格式,也是一种最佳解决方案,使用starter可以帮助开发者减少依赖配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>compile</scope>
</dependency>

- 开发SpringBoot程序需要导入坐标时通常导入对应的starter
- 每个不同的starter根据功能不同,通常包含多个依赖坐标
- 使用starter可以实现快速配置的效果,达到简化配置的目的


修改默认版本号properties
✔实际开发应用方式
- 实际开发中如果需要用什么技术,先去找有没有这个技术对应的starter
- 如果有对应的starter,直接写starter,而且无需指定版本,版本由parent提供
- 如果没有对应的starter,手写坐标即可
- 实际开发中如果发现坐标出现了冲突现象,确认你要使用的可行的版本号,使用手工书写的方式添加对应依赖,覆盖SpringBoot提供给我们的配置管理
- 方式一:直接写坐标
- 方式二:覆盖中定义的版本号,就是下面这堆东西了,哪个冲突了覆盖哪个就OK了


c:引导类 简化启动配置
- SpringBoot工程提供引导类用来启动程序
- SpringBoot工程启动后创建并初始化Spring容器

d:内嵌tomcat
- 内嵌Tomcat服务器是SpringBoot辅助功能之一
- 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并
将该对象交给Spring容器管理 - 变更内嵌服务器思想是去除现有服务器,添加全新的服务器

内置服务器
tomcat(默认) apache出品,粉丝多,应用面广,负载了若干较重的组件
jetty 更轻量级,负载性能远不及tomcat
undertow undertow,负载性能勉强跑赢tomcat
切换内置服务器 exclusions

e:自动配置
1.自动配置Tomcat
2.自动配置SpringMVC:常用组件等
3.自动配置Web常见功能:字符编码问题等
4.自动扫描组件
○ 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
○ 无需以前的包扫描配置
○ 想要改变扫描路径,
@SpringBootApplication(scanBasePackages=“com.xiaoyang”)
■ 或者@ComponentScan 指定扫描路径
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.xiaoyang") //定义包扫描注解
等…
二:注解用法
1.添加组件注解
@configuration @Bean 定义配置类
✔Full模式与Lite模式
-
配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断(多例模式)
-
配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式(单利模式、默认true)

✔@configuration
- 定义一个配置类,相当于Spring.xml+
- 该类本身也是一个Bean,可以从容器中获取
✔@Bean
- 用法的形式给容器添加组件,Bean类型是方法返回值类型,Bean名称是方法名(可以修改),Bean对象是方法返回值
/**
* 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
* 2、配置类本身也是组件
* 3、proxyBeanMethods:代理bean的方法
* Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
* Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
* 组件依赖必须使用Full模式默认。其他默认是否Lite模式
*
*
*
*/
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
/**
* Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
* @return
*/
@Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
public User user01(){
User zhangsan = new User("zhangsan", 18);
//user组件依赖了Pet组件
zhangsan.setPet(tomcatPet());
return zhangsan;
}
@Bean("tom")
public Pet tomcatPet(){
return new Pet("tomcat");
}
}
################################@Configuration测试代码如下########################################
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")
public class MainApplication {
public static void main(String[] args) {
//1、返回我们IOC容器
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
//2、查看容器里面的组件
String[] names = run.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
//3、从容器中获取组件
Pet tom01 = run.getBean("tom", Pet.class);
Pet tom02 = run.getBean("tom", Pet.class);
System.out.println("组件:"+(tom01 == tom02));
//4、com.atguigu.boot.config.MyConfig$$EnhancerBySpringCGLIB$$51f1e1ca@1654a892
MyConfig bean = run.getBean(MyConfig.class);
System.out.println(bean);
//如果@Configuration(proxyBeanMethods = true)代理对象调用方法。SpringBoot总会检查这个组件是否在容器中有。
//保持组件单实例
User user = bean.user01();
User user1 = bean.user01();
System.out.println(user == user1);
User user01 = run.getBean("user01", User.class);
Pet tom = run.getBean("tom", Pet.class);
System.out.println("用户的宠物:"+(user01.getPet() == tom));
}
}
@Component @Controller、@Service、@Repository
@Component:将类标识为普通组件
@Controller:将类标识为控制层组件
@Service:将类标识为业务层组件
@Repository:将类标识为持久层组件
@ComponentScan 包扫描注解

@import
@Import通过快速导入的方式实现把实例加入spring的IOC容器中
@Import注解的作用和在使用spring的xml配置时用到的类似。但应注意是@Import在使用时,
必须要保证能被IOC容器扫描到,所以通常它会和@Configuration或者@ComponentScan配套使用。
@Import在使用时可以声明在JAVA类上,或者作为元注解使用(即声明在其他注解上)
@Conditional 按条件装配
条件装配:满足Conditional指定的条件,则进行组件注入
2. 原生配置文件引入
@ImportResource
3. 配置绑定
@ConfigurationProperties 封装指定数据
- 使用@ConfigurationProperties注解绑定配置信息到封装类中
- 封装类需要定义为Spring管理的bean,否则无法进行属性注入


@EnableConfigurationProperties + @ConfigurationProperties
@Component + @ConfigurationProperties
SpringBoot基础配置
✔SpringBoot提供了3种配置文件的格式
- properties(传统格式/默认格式)
- yml(主流格式)
- yaml
✔SpringBoot默认配置文件application.properties,通过键值对配置对应属性
✔SpringBoot配置文件加载顺序
- application.properties > application.yml > application.yaml
✔不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留
1. 常用属性配置
修改端口号 server.port=80
关闭运行日志图表(banner) spring.main.banner-mode=off
设置日志相关等级 logging.level.root=debug
打开SpringBoot的官网,找到SpringBoot官方文档,打开查看附录中的Application Properties就可以获取到对应的配置项了:SpringBoot内置属性查询
2.yaml文件

- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- #表示注释
- 核心规则:数据前面要加空格与冒号隔开


3.yaml数据读取
- 使用@Value配合SpEL读取单个数据
- 如果数据存在多层级,依次书写层级名称即可
使用@Value读取单个数据

在配置文件中可以使用属性名引用方式引用属性

封装全部数据到Environment对象
- 使用Environment对象封装全部配置信息
- 使用@Autowired自动装配数据到Environment对象中

自定义对象封装指定数据@ConfigurationProperties
- 使用@ConfigurationProperties注解绑定配置信息到封装类中
- 封装类需要定义为Spring管理的bean,否则无法进行属性注入


4.配置文件自动提示功能消失解决方案
✔指定SpringBoot配置文件
- Setting → Project Structure → Facets
- 选中对应项目/工程
- Customize Spring Boot
- 选择配置文件


本文详细介绍了SpringBoot的开发小技巧,包括Lombok的使用、dev-tools的热部署和复制工程的方法。深入探讨了SpringBoot工程的创建、工作原理,如parent、starter的作用,自动配置、引导类和内嵌Tomcat。同时,讲解了注解用法,如@Configuration、@Bean、@ComponentScan等,以及配置文件的绑定和基础配置。文章还涵盖了SpringBoot的多环境开发、Linux系统发布及整合第三方技术等内容。
344

被折叠的 条评论
为什么被折叠?



