当前位置: 首页 > 面试题库 >

多模块组件扫描在Spring Boot中不起作用

郑曜灿
2023-03-14
问题内容

我有两个模块的网络和业务。我已将业务纳入网络。但是,当我尝试将业务到Web使用的服务接口包括在内时@autowired,它确实很实用org.springframework.beans.factory.NoSuchBeanDefinitionException

因此,基本上@SpringBootApplication无法扫描@Service来自业务模块。

这很简单,我想念吗?

如果我@Bean@SpringBootApplication该类中添加了该服务,它就可以正常工作。

码:

package com.manish;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

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

来自模块1的类,正在从中调用模块2的类:

package com.manish.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import uk.co.smithnews.pmp.service.contract.UserRegistrationService;

@RestController
@RequestMapping("/testManish")
public class SampleController {

    @Autowired
    private SampleService sampleService;
....
}

单元2:

package com.manish.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class SampleServiceImpl implements SampleService {
}

谢谢,


问题答案:

@SpringBootApplication 仅扫描带有注释本身的类的包以及下面的所有包。

示例:如果带有SpringBootApplication批注的类在package中com.project.web,则将扫描此包以及下面的所有包。

但是,如果您的服务包中有服务,com.project.business则不会扫描bean

在这种情况下,您必须将注释添加@ComponentScan()到应用程序类中,然后将要扫描的所有软件包都添加为该注释中的值,例如@ComponentScan({"com.project.web", "com.project.business"})



 类似资料:
  • 我创建了一个示例Spring Boot应用程序,当所有服务类都在一个包中时,该应用程序运行良好,但如果一个服务类引用了不同包中的另一个服务类,那么我将得到BeanCreationException 下面给出了应用程序的代码

  • 问题内容: 我试图扫描JedisCluster中存储的特定密钥。 在这里,我得到了空值。但是群集节点中存储了一个值。 但是,如果我尝试扫描每个Jedis池,我将得到结果。 为什么JedisCluster扫描方法无法提供正确的结果?我该如何解决这个问题? 注意:我可以用来检查密钥的存在。但是我需要使用扫描,因为我可以对Jedis和JedisCluster使用相同的界面。 问题答案: 第1部分: 在您

  • 我有两个Maven模块。第一个,叫做“应用程序”,包含了只包含以下行的Application类: 在同一个Maven模块和包中,我有一个,它使用,然后使用下面描述的其他Maven模块的组件。 另一个名为“model”的Maven模块包含组件(crud存储库、实体等)。所有这些类都与第一个Maven模块()位于相同的包结构下,但都位于该模块的子包中,比如,等。 所以,流程是这样的: Maven模块包

  • 我正在运行以下版本的声纳扫描: 蚂蚁v3。0.5 声纳v4。5.4 声纳蚂蚁任务v2。三, 我的ant项目包含100个子模块;其中大约一半有外部库,一半没有 在我的ant构建文件中,设置了以下声纳属性: 上面提到的最初问题是,对于没有外部lib的模块,它会失败,因为编译后/build/dependency中没有jar。 根据这个存档链接:http://sonarqube-archive.15.x6

  • 服务类用@service(又名注释,这使它有资格进行自动连接。为什么在单元测试过程中这个类没有被提取和自动连线? 全堆栈跟踪 如果test class用@SpringBootTest进行了注释,那么它将创建整个应用程序上下文,包括数据库连接和许多不相关的bean,而这些bean显然不需要用于这个单元测试(那么它就不是单元测试了!)。希望只有所依赖的bean才应该被实例化,但使用进行模拟的bean除

  • 问题内容: 因此,我是一名新Java程序员,我试图弄清楚为什么一段代码无法正常工作。我遇到的问题是:“字符串兴趣= input.nextLine();”,它跳过了用户的输入并跳至下一个System.out,因此它仅在控制台中显示“您的个人资料…”在允许用户输入任何数据之前。抱歉,这是一个愚蠢的问题,我很新! 问题答案: 这样说: 其余代码可能与您上面的代码相同。 编辑: 它必须是这样的(我的意思是

  • 问题内容: 我使用python redis通过使用match选项来匹配某些信息吗?但这不起作用。 似乎match选项在scan命令中确实起作用。 在[68]中:cache.rds.execute_command(“ scan”,“ 0”,match =“ userinfo_ *”)Out [68]:[‘28’,[‘user_dev_20199116’,’devinfo_af85d776fcc9db

  • 所以我试着做一个简单的java预订系统,但问题是扫描仪功能不起作用,所以程序不需要任何输入。我试着把扫描仪,但它显示了一个警告,当我试图运行程序时,局部变量没有被使用,因此扫描仪不工作,所以整个程序卡在输入部分,不做任何其他事情。我对java很陌生,正试图通过创建项目来学习,所以我将感谢任何帮助和建议,谢谢。这是代码:所以显示警告局部变量不被使用的部分或一行代码是行8,9,16,34,36,46,