spring boot引入第三方jar中的bean

5,677 阅读3分钟

一、spring boot中扫码第三方jar中的注入bean

说明:因为需要在项目中引入了的子模块,而子模块中有注入依赖,在项目中也需要用到。所以需要扫描到第三方jar中的注入bean。

IDE工具中的配置

  1. 关于 Spring Boot 自动注入及组件扫描 在平时使用 Spring Boot 时,常常会使用到@Configuration,@Contoller,@Service,@Component等注解,被添加这些注解的类,在 Spring Boot 启动时,会自动被 Spring 容器管理起来。

上面提到了,添加了一些注解的类会在Spring Boot 容器启动时,被加载到Spring 容器中。那么,组件扫描的作用就是:当 Spring Boot 启动时,根据定义的扫描路径,把符合扫描规则的类装配到spring容器中。

  1. 关于spring boot中扫描路径 springboot默认会扫描启动类所在的包及其子包;A模块的Application是在com.xxx.family包下,那么势必只能扫描到这个包下的bean。B模块的Application是在com.xxx包下,那么在A引入B以后就A就肯定扫描不到他上层包的bean了。

  2. spring boot中@Component scan 通过上面的描述,我们已经知道了spring boot的扫码路径,所以如果是引入的子模块,需要扫描到的话,包的位置需要配置好,这是一个办法;但是经常没有那么刚好的设置包的位置,也挺麻烦的,所以通过添加另外注解来覆盖扫描的外部路径。

增加启动类的扫描有一下两种方式:

@ComponentScan(basePackages = { "org.test1", "org.test2" })
@SpringBootApplication
public class App {
    public static void main(String[] args) {
	SpringApplication.run(App.class, args);
    }
}

或者下面的方式,都可以扫描到外部路径

@SpringBootApplication(scanBasePackages = { "org.executor", "org.distribute" })
public class App {
    public static void main(String[] args) {
	SpringApplication.run(App.class, args);
    }
}
  1. 结果 通过上面的方式,在eclipse中已经可以实现启动模块引入jar注入bean的功能了,测试确实是可用的

  2. 参考 blog.csdn.net/inthat/arti…
    juejin.cn/post/684490…

spring boot打包的jar中引入第三方jar包注入的bean

  1. 配置好了启动类扫描的路径之后,会发现打包之后的jar包启动时,仍然会提示无法加载到引入的jar中的bean。 这是因为经过打包后,项目的目录结构变成了下面的模式

image.png
B项目本身又作为A项目BOOT-INF/lib下的jar包,A项目使用java -jar从入口启动类启动后无法扫描到B项目的注解,

且B项目中的lib也与A项目中的lib下jar包存在重复。

  1. 解决办法 在被引入的项目的pom.xml中增加以下配置
<configuration>
    <classifier>exec</classifier>
</configuration>

完整pom.xml中的build配置如下

<build>
    <plugins>
	<plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
		<classifier>exec</classifier>
            </configuration>
	</plugin>
    </plugins>
</build>

这样被引入的项目编译后target目录下会产生两个文件,test.jar和test-exec.jar。其中test-exec.jar与之前的结构是一样,可以被执行。

这样再对引入的项目打包后,项目BOOT-INF/lib目录下只会加入test.jar,实测启动可以正常扫描到test项目中的注解.

而如果需要执行test项目,可以执行java -jar test-exec.jar

  1. 参考 www.codeleading.com/article/734… blog.csdn.net/u014365523/…