您的位置:首页 > 编程语言 > Java开发

15.基于SpringBoot的多模块项目引入其他模块时@Resource无法注入其他模块stereotype注解类对象的问题解决(加载另一个模块的XML配置文件解决)

2020-02-06 08:18 2687 查看

15.基于SpringBoot的多模块项目引入其他模块时@Resource无法注入其他模块stereotype注解类对象的问题解决(加载另一个模块的XML配置文件解决)

在多模块项目中,往往需要在一个模块中注入另一个模块中的服务层(@Service)或持久层(@Repository)类的对象,但有时会报错无法找到,异常如下

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jedisDaoImpl'

这个错误纠结了我一天,为此我特地总结一下,防止别人步我的后路,浪费时间,

首先讲下我的项目情况,我需要在一个模块A(模块名:consumer,SpringBoot搭建 ) 调用另一个模块B(模块名:redis,Maven搭建),

1.模块B采用Maven搭建的情况

模块B是完成redis一些类的声明,起初没有接触过SpringBoot,就想着模块按照原先的项目构建方式(简单Maven,因为懒得去application.properties重新配置),配置了关于redis的XML,然后打包上传到maven去,以为像之前一样,其他项目就可以直接访问了

之前Dubbo项目可以访问原因可能是:这段配置的意思是,加载所依赖项目下的相关文件夹的XML与properties文件

<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>

然后通过模块A进行调用,发生异常错误,无法找到对应bean

@Resource
private JedisDao jedisDaoImpl;

//错误:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jedisDaoImpl':

错误原因分析:以前Maven项目(war)项目是有web.xml配置文件,进行一些配置文件加载,

然后现在模块A采用了SpringBoot技术,简化配置,所有的配置都在application.properties,然后靠启动类启动,然后我模块A的启动类如下

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

}

从中模块A启动类,我们没有看到任何 关于 模块 B 的 XML文件的配置加载,所以要怎么样加载到另一个模块关于XML文件配置,然后就想着把模块B也改成SpringBoot模式,然后再在模块A中启动类设置把模块B的启动类也一起加载

这段话不明白请参照:https://blog.csdn.net/yang_456/article/details/82151124

  1. 模块B采用SpringBoot模式
    项目模块结构图

模块A启动类修改后

@SpringBootApplication
@ComponentScan(basePackages = {"com.example","com.kmall"})
public class DemoApplication {

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

}

"com.example",“com.kmall” 两个包分被为两个SprigBoot模块启动类所在的包名,这样就可以通过启动类,来加载相关配置,

因为需要让模块B的XML文件被加载到,在SpringBoot中不推荐XML文件的格式,所以我们需要把XML文件装载成类,具体代码如下

package com.kmall.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

/**
* Created by Administrator on 2019/10/5 0005.
*/
@Configuration
@ImportResource(locations= {"classpath:applicationContext-jedis.xml"})
public class Config {

}

这样就可以加载到xml文件的配置信息,因为SpringBoot的启动类,默认扫描同包以及子包的注解,然后模块B的启动类又被模块A的启动类加载,这样模块A中就可以使用相关的配置信息了,

  • 点赞
  • 收藏
  • 分享
  • 文章举报
weixin_41863683 发布了13 篇原创文章 · 获赞 0 · 访问量 749 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐