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

我不能@Autowire从属库Jar中存在的Bean吗?

胡鸿羲
2023-03-14
问题内容

我有一个Spring Boot应用程序(Y),它依赖于一组打包为x.jar并在应用程序Y的pom.xml中作为依赖项提及的库文件。

x.jar有一个名为(User.java)的bean。应用程序Y有一个名为(Department.java)的java类。

当我尝试在Department.java中自动装配User.java实例时,出现以下错误

我不能@Autowire从属库Jar中存在的Bean吗?

无法自动连线栏位:私人com.User使用者;嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[com.User]的合​​格Bean作为依赖项:至少应有1个有资格作为该依赖项自动装配候选者的bean。依赖项注释:{@
org.springframework.beans.factory.annotation.Autowired(required = true)}

找不到依赖项类型为[com.User]的合​​格Bean:期望至少有1个符合此依赖项自动候选条件的bean。依赖项注释:{@
org.springframework.beans.factory.annotation.Autowired(required = true)} **

这是Spring Boot应用程序“ Y”中的代码

package myapp;

@Component
public class Department {

    @Autowired
    private com.User user;

    //has getter setters for user

}

这是库x.jar中User.java的代码

 package com;

@Component
@ConfigurationProperties(prefix = "test.userproperties")
public class User {

  private String name;
  //has getter setters for name    
}

这是应用程序Y的pom.xml中x.jar的依赖项

      <groupId>com.Lib</groupId>
      <artifactId>x</artifactId>
      <version>001</version>
    </dependency>

这是应用程序“ Y”中的主类

@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableZuulProxy
@EnableGemfireSession(maxInactiveIntervalInSeconds=60)
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
public class ZuulApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
    }
}

部门和用户处于不同的软件包下。

解决方案:我应用了以下两个步骤,现在自动装配工作正常。

步骤1:在jar文件中添加了以下类

package com
@Configuration
@ComponentScan
public class XConfiguration {

}

步骤2:将此配置类导入到Y项目的主类中

@Configuration
    @EnableAutoConfiguration
    @ComponentScan
    @EnableZuulProxy
    @EnableGemfireSession(maxInactiveIntervalInSeconds=60)
    @EnableCircuitBreaker
    @EnableHystrixDashboard
    @EnableDiscoveryClient
    @Import(XConfiguration.class) 
    public class ZuulApplication {

        public static void main(String[] args) {
            new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
        }
    }

问题答案:

您需要添加主类和User类的包名称,以100%确定,但更有可能的是,User类与主类不在同一个包(或子包)中。这意味着不会扫描组件。

您可以强制spring查看其他这样的软件包:

@ComponentScan(basePackages = {"org.example.main", "package.of.user.class"})


 类似资料:
  • 我已经尝试了以下问题中的解决方案,但在我的情况下都不起作用: 错误: XLSHTTPSMessageConverter:

  • 问题内容: 我有一个已创建的模块/ jar,正在用作util 库。我在那里创建了一个服务,如下所示: …它位于以下包中的位置:com.inin.architect.permissions和我的主应用程序中,我正在引用/加载此jar(即,设置为该应用程序的Maven POM.xml文件中的依赖项),例如所以: 在应用程序中,我想使用该服务,例如: 在应用程序的spring设置中,我得到了以下信息:

  • 我已经创建了一个模块/jar,并将其用作util库。我在其中创建了一个服务,如下所示: 那么,如何将bean从lib带入应用程序呢?当然有办法。您必须将库设置为一个完整的spring MVC应用程序才能工作吗?也就是说,你必须在库中设置@configuration和@componentscan吗?

  • 我想为Dao类编写一个JUnit测试。dao不需要任何save方法,因为它只读取一些数据。 测试使用的是HSQLDB,我需要先插入一些测试数据。由于我不想只编写代码来使测试运行,所以我扩展了DaoImpl类,使其具有一个save方法。

  • 我正在努力从我的自定义库中自动生成bean,这是和Gradle一起导入的。读了几个类似的题目后,我仍然无法找到解决方法。 我有一个Spring Boot项目,它依赖于另一个项目(我的带有组件、存储库等的自定义库)。这个库是一个Spring不可运行的jar,主要由域实体和存储库组成。它没有可运行的Application.Class和任何属性... 错误: Com.MyProject.CustomLi

  • 我正在构建一个自包含的应用程序(JAR包括所有必需的库)来验证一些数据库操作。当我试图构建基于注释的应用程序时,它在Eclipse中运行良好,但从JAR中它给Bean找不到异常。 以下是我的主要疼痛区域。 如何启用JPA存储库类autowire enabled?我将能够显式地注册除JPA存储库之外的每个类作为其接口。 关于这个话题的任何帮助都会非常有用。提前谢谢。