【问题标题】:How to autowire a bean in other class in a Spring Boot application?如何在 Spring Boot 应用程序中自动装配其他类中的 bean?
【发布时间】:2019-04-06 17:49:15
【问题描述】:

在 Spring Boot 应用程序中,我有一个如下类:

@Service
public class XYZ{
}

我想在其他 ABC 类中使用上述内容,例如:

public class ABC{

    @Autowired
    private XYZ xyx;

}

它会抛出无法找到 XYZ 的错误。我已经在编写 main 方法的类中有@SpringBootApplication。因此,这将自动在包上启用 @ComponentScan。 ABC 在 spring 配置文件中创建为 bean。我的理解是,由于 XYZ 已使用@service 进行注释,因此 spring 扫描并创建和注册该 bean。如何在不使用 xml 配置的情况下访问其他类中的 bean?

【问题讨论】:

    标签: java spring spring-boot autowired


    【解决方案1】:

    ABC 是如何实例化的? ABC 对象必须由 Spring 实例化。

    换句话说,ABC 类也必须是某种@Component。它可以由@SpringBootApplication 自动装配,或者在Web 应用程序的情况下,它可以是@Controller

    【讨论】:

    • ABC 在 spring 配置 xml 文件中被创建为 bean
    • 将 ABC 创建为 bean 后,您如何使用它?
    • ABC 是事件监听器
    【解决方案2】:

    除了上面@Sharon Ben Asher 所说的:以防万一如果在测试执行期间抛出错误并且测试上下文使用@SpringBootTest 以外的任何内容,那么该上下文有可能不扫描 @Service 注释 bean。

    例如,带有@DataJpaTest 注释的测试类不会扫描@Service bean;它需要一个明确的@ComponentScan 来解析它。有关示例 sn-ps 的详细信息,请参见 https://stackoverflow.com/a/52939210/5107365

    【讨论】:

      猜你喜欢
      • 2018-07-28
      • 1970-01-01
      • 2015-05-02
      • 2022-08-20
      • 1970-01-01
      • 2015-11-14
      • 2015-12-19
      • 1970-01-01
      • 2020-08-26
      相关资源
      最近更新 更多