前言:
spring boot项目简化了对外部项目的引入,使我们能够狠方便的构建一个web项目,我们通常在开发的过程中会开发出一些公用的模块组件,这样在项目找那个引入后能够直接使用,减少了轮子的重复构造,同时服务引入的模块化操作,能够更多的节省资源和开发效率。那么在这个过程中,我们需要对外部引入的资源bean需要进行注入扫描,这样,我们在关住构建自身的服务同时,也需要对外部的依赖进行管理,同时也可能出现各种各样的问题,那么我们有没有一种方法只需要对外部的组件进行gav引入,就直接可以上手使用了呢,这种问题早已经有了解决方案,本文就简单快速的介绍一下这种解决方案的思路和方法。
1、构建你的公共组件模块
1、在公共组件模块resources目录下,新建META-INF(META-INF 相当于一个信息包,目录中的文件和目录获得 Java 2 平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务manifest.mf文件,在打包时自动生成。)文件夹,其实这种方式是参照Java中的SPI扩展机制来实现,有兴趣的朋友可以去了解下。
扩展下spi,java spi的具体约定为:当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。 基于这样一个约定就能很好的找到服务接口的实现类,而不需要再代码里制定。jdk提供服务实现查找的一个工具类:java.util.ServiceLoader
2、当前文件下下新增spring.factories文件,里面新增如下内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
xxx.yyy.zzz.extension.redis.config.RedisConfig,
说明:如果需要换行,需要在每行的文末添加反斜杠()
以上内容的第一行标识告诉spring需要自动加载当前的配置,第二行,就是你在当前的模块中需要自行加载的bean文件。模块目录结构具体如下图
小结: 通过以上的操作,我们就可以把自定义的公共组件打包成一个sdk,这样,其他的如何服务只要需要使用我们的组件,只需要引入当前sdk组件依赖的gav就可以行进行使用了。
2、spring boot服务引入依赖gav
<dependency>
<groupId>com.xxx.yyy</groupId>
<artifactId>xxx-extension-obs</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
好了,在springboot项目中引入以上模块的gav后,我们就直接可以使用公共模块的bean了,此时在类中只需要通过@Resource @Autowired 等等注解配置就可以直接使用了。