【SpringBoot项目拆分】

背景:两个项目都使用相同了的底层方法,每次变更都需要修改两个项目,所以就考虑是否可以抽出来一个单独的项目来维护这些底层方法。

在网上找了很多发现都是新建module的,这种方法适合一个项目内部优化结构,不适合两个项目共用,最后突然想到了之前曾经做过一个项目,多个项目都依赖于公共方法模块,然后找了之前的代码,发现核心实现方式是SpringBoot启动类的注解@MapperScan和@ComponentScan。

下面说下整体的实现流程,最后再介绍上面两个注解

1. 新建一个maven项目(common)

在这个项目中放所有的公共服务代码,其中注解正常添加即可。

在pom上添加所有用到的依赖。

新增Spring的配置文件(如果需要的话,不需要忽略,比如数据库配置信息等等),配置文件需要命名为application-common.yml

2. 新增SpringBoot项目

在这个项目中,存放上层调用。

在pom上除了添加正常依赖外,还需要添加common项目的依赖

XML 复制代码
 <dependency>
            <groupId>xxx</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

在application.yml中配置激活的配置文件,如下

XML 复制代码
spring:
  profiles:
    active: common,xxx

在启动类上添加@MapperScan注解,添加需要扫描的mapper包

在启动类上添加@ComponentScan注解,添加需要注册bean包(注意:本项目和common项目中的包都需要添加)

java 复制代码
@MapperScan("com.test.common")
@ComponentScan(basePackages = {"com.test.common", "com.test.web"})
@SpringBootApplication()
public class WebApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }

}

在这块,ComponentScan的写法可以修改为如下scanBasePackages,结果是相同的

java 复制代码
@MapperScan("com.test.common")
@SpringBootApplication(scanBasePackages = {"com.test.common", "com.test.web"})
public class WebApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }

}

3. MapperScan

@MapperScan 是 MyBatis-Spring 项目中的一个注解,用于指示 Spring 扫描并注册 MyBatis 的 Mapper 接口,使得这些接口可以被自动实例化并注入到 Spring 容器中。

在使用 MyBatis 时,通常会定义 Mapper 接口来描述 SQL 操作,而实际的 SQL 语句和参数映射是通过 XML 文件完成的。@MapperScan 注解的作用是告诉 Spring 扫描指定的包路径,查找这些包下的 Mapper 接口,并将它们注册到 Spring 容器中。

4. ComponentScan

使用 @ComponentScan 注解可以告诉 Spring 在指定的包或类路径下进行组件扫描,然后自动将被扫描到的组件注册到 Spring 容器中。

相关推荐
m0_740043733 小时前
SpringBoot05-配置文件-热加载/日志框架slf4j/接口文档工具Swagger/Knife4j
java·spring boot·后端·log4j
编织幻境的妖3 小时前
SQL查询连续登录用户方法详解
java·数据库·sql
未若君雅裁4 小时前
JVM面试篇总结
java·jvm·面试
kk哥88994 小时前
C++ 对象 核心介绍
java·jvm·c++
招风的黑耳5 小时前
我用SpringBoot撸了一个智慧水务监控平台
java·spring boot·后端
xunyan62345 小时前
面向对象(下)-接口的理解
java·开发语言
大佐不会说日语~5 小时前
Spring AI Alibaba 的 ChatClient 工具注册与 Function Calling 实践
人工智能·spring boot·python·spring·封装·spring ai
Miss_Chenzr5 小时前
Springboot优卖电商系统s7zmj(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
程序员游老板5 小时前
基于SpringBoot3+vue3的爱心陪诊平台
java·spring boot·毕业设计·软件工程·课程设计·信息与通信
期待のcode5 小时前
Springboot核心构建插件
java·spring boot·后端