java - 如何在库项目中配置依赖注入(inject)?

标签 java spring maven spring-boot

如何在库项目中配置依赖注入(inject)?

让我用下面的例子来说明这个问题。

Maven 库项目

预订API

com.example.reservation-api

该项目包含一个名为 ReservationApiClient 的便利类,它使用 RestTemplate(来自 Spring 框架)进行 HTTP 调用。

是否可以在此库项目中将 RestTemplate 字段设置为 @Autowired,而不是自己实例化它?

Maven 可执行项目

org.company.application

该项目是一个 Spring Boot 应用程序,并使用上述 ReservationAPI 作为依赖项。此应用程序将为该库中包含的便利类 ReservationApiClient 创建一个 @Bean,然后执行其公共(public)方法,进而发出 HTTP 请求。

对于上述场景,什么是好的策略和/或最佳实践?

最佳答案

如果您在库项目中包含 Autowiring ,则可以执行此操作,但这意味着它始终需要与 Spring 应用程序上下文一起使用才能获取值,除非您还可以使用 getter/setter 方法。然而,我认为使用 RestTemplate 作为 Autowiring 对象没有意义,因为 RestTemplate 没有任何具体内容,除非您命名 bean,否则一类只有一个 bean 定义。无论如何,RestTemplate 的所有方法都需要 URI。因此,在本例中,我将仅在应用程序中使用 ReservationApiClient 的 bean。

另一种方法是,如果您想在库中包含 Spring 依赖项(我猜您已经通过使用 RestTemplate 实现了),您可以将 ReservationApiClient 声明为 @Service 或 @Component,然后使用 @ComponentScan在主 Spring Boot 项目中添加注释,以在该库中搜索要包含在 bean 注册表中的组件。

另一个选择是使用 Spring Boot 的自动配置等功能来创建使用第三方库的工厂,并根据应用程序设置中的属性配置它们。 auto configuration documentation将是一个很好的起点。你可以看到他们有的入门项目 on GitHub然后关联 Autoconfigure classes他们与这些有联系。

如果其中任何内容没有意义,请告诉我。

关于java - 如何在库项目中配置依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185648/

相关文章:

java - 未定义名为 'myUserDetailsService' 的 bean

java - Spring @Value 注释不起作用

spring - ReactiveCrudRepository 在 spring 中使用 Hibernate

java - jetty :run fails with NoSuchMethodError with Spring 5

java - JUnit 测试内存不足——如何增加堆大小?

java - Android Studio重构问题

java - 按指定顺序递增数字

java - Android JSON通过HttpURLConnection获取错误405

java - 具有提供范围的库仍然存在于 jar 中

java - JerseyTest 不满足依赖关系(依赖注入(inject))