x
摆烂一个月我又回来了,其实是下午要被拷打没招了
虽然我啥都不知道,但我有勇气去现眼哈哈哈哈哈哈哈哈哈哈哈哈,无所谓反正就见一面
恢复一下丢失的记忆,起码知道我写的代码有哪些功能
首先配置Maven多模块项目的父pom文件
1 | <modelVersion>4.0.0</modelVersion> //指定当前 Maven 项目使用的 POM 模型版本。 |
让 Maven 项目继承 Spring Boot 官方提供的 “父项目”
Spring Boot 官方写了一个 “万能模板父类”(spring-boot-starter-parent),只需要 “继承” 这个模板,就不用自己手写大量重复的 Maven 配置
<parent>...</parent>整个标签
- 核心作用:声明当前项目是一个 “子项目”,继承自 Spring Boot 官方的父项目。
- 类比:就像 Java 里
class A extends B,A 会继承 B 的属性和方法;这里你的项目会继承spring-boot-starter-parent的依赖版本、插件配置等。
继承父项目后,只需要写核心依赖,版本会自动继承父项目的 2.7.3:
1 | <dependency> |
<properties> 配置是 Maven 里的依赖版本统一管理,先把各个第三方依赖的版本号定义成变量,后续在 <dependencies> 里引用这些变量即可,避免重复写版本号
1 | <properties> |
“轮子”:就是那些通用、基础、别人已经写好并验证过的功能(比如字符串判空、数组排序)。
Maven:构建工具(辅助)
- 本质:基于 Java 开发的工具(本身也是 Java 程序),核心是
pom.xml配置文件;
核心功能:
- 依赖管理:比如你要用到 Spring,只需在
pom.xml写<dependency>,Maven 自动下载 Spring 的 jar 包,不用手动下载复制;- 项目构建:一键执行
mvn clean package,自动编译代码、打包成 jar/war 包;- 生命周期管理:统一编译、测试、打包、部署的流程,团队协作时规范一致。
关键区别:Maven 不参与业务逻辑编写,只负责 “项目的构建和依赖管理”,没有 Maven 也能开发 Java 项目(手动下载 jar 包、手动编译),但效率极低。
1 | # 执行 mvn clean package 命令时,Maven 做的事: |
Spring:开发框架(提升效率)
- 本质:基于 Java 语言编写的一套类库(jar 包),核心是 IOC(控制反转)和 AOP(面向切面编程);
- 核心功能
- 简化对象管理:IOC 容器帮你创建、管理对象(Bean),不用手动
new;- 简化通用功能:AOP 实现日志 / 事务 / 权限的统一处理,声明式事务
@Transactional一行搞定;- 生态丰富:Spring Boot(快速开发)、Spring Cloud(微服务)、Spring MVC(接口开发)等,覆盖企业开发全场景。
手动 new 对象 vs Spring 管理 Bean
| 手动 new 对象(无 Spring) | Spring 管理 Bean(IOC 容器) |
|---|---|
开发者手动创建对象:UserService userService = new UserService(); |
开发者告诉 Spring “要管理这个类”,由 Spring 容器创建对象; |
| 开发者手动管理对象的生命周期(创建、销毁) | Spring 容器自动管理 Bean 的生命周期(初始化、销毁); |
开发者手动注入依赖:userService.setUserDao(new UserDao()); |
Spring 容器自动注入依赖(@Autowired); |
标记为 Bean 的类,若依赖其他 Bean,只需在变量上添加 @Autowired
@Service/@Repository/@Controller 本质是 @Component 的 “别名”
配置application.yml是springboot的默认配置文件,属于误打误撞了,现在才知道,之前觉得yml格式规整就没用.properties格式
正常顺序是在main包下面创建java和resources包,re包下面配置yml,xml,static和templates文件
static是静态文件目录,templates是模板文件目录
源码目录结构是:
1
2
3
4
5
6
7
8
9
10
11 src/main/java
└── com
└── itranswarp
└── learnjava
├── Application.java
├── entity
│ └── User.java
├── service
│ └── UserService.java
└── web
└── UserController.java
1 | 阶段1:设置值(Java内部) |
先获取时间存到java内存里,发送json时再用webmvc捕获然后转换
service层为什么长这样,为什么不直接再service实现业务代码
这种结构,是 面向接口编程(Interface-Oriented Programming) 的典型实践
1. 解耦(核心价值)
- 接口(如
PlayerService):只定义 “能做什么”(方法签名),不关心 “怎么做”。 - 实现类(如
PlayerServiceImpl):负责具体的业务逻辑实现。 - 这样一来,Controller 层只依赖
PlayerService接口,而不依赖具体的PlayerServiceImpl。如果以后需要替换实现(比如从 MySQL 换成 MongoDB,或者重构业务逻辑),只需要新增一个实现类,Controller 层代码完全不用改。
2. 便于扩展和多实现
同一个接口可以有多个实现类,应对不同场景:
- 例如:
ManageTeamService可以有ManageTeamServiceImpl(正式环境实现)和ManageTeamServiceMockImpl(测试环境模拟实现)。 - 这在微服务、插件化开发中尤为重要。
3. 便于单元测试
- 依赖接口后,可以使用 Mock 框架(如 Mockito)轻松模拟一个
PlayerService的实现,而不需要启动整个 Spring 容器或连接真实数据库,就能对 Controller 进行单元测试。
4. 符合 “开闭原则”
- 对扩展开放,对修改关闭。新增业务逻辑时,优先新增实现类或扩展接口,而不是修改原有代码,降低了引入 Bug 的风险。
如有错误,多多指教