2

我是 Spring 依赖注入的新手,我正在努力学习最佳实践。我想知道将带有注释的类@ConfigurationProperties注入服务层类(带有注释@Service)是否是一种好的设计理念。我试图将我的属性映射application.yml到一个配置类,如下所示 -

@ConstructorBinding
@ConfigurationProperties(prefix = "application")
class ApplicationConfig(
  val kafka: someDeeplyNestedType = SomeDeeplyNestedObj()
 ) {
       // helper functions
   }

然后我在服务层中注入上面的配置类,如下所示 -

@Service
@EnableConfigurationProperties(ApplicationConfig::class)
class RestService(val config: ApplicationConfig) {
   init {
      // Reference config object
     // Reference application.yml properties via config object.
   }
}

我很想知道我是否可以改进我当前的实现——不确定是否可以将configuration类传递给service-layer类。我也很想知道是否有更好的布线方法ApplicationConfig而不需要使用EnableConfigurationProperties注释。

4

2 回答 2

0

对此没有硬性规定,因为在 Spring Boot 中,我们可以在类级别添加 @EnableConfigurationProperties 并使用原型注释。

作为良好实践的一部分,EnableConfigurationProperties 或任何配置都应该是配置类或主要 Spring Boot 类的一部分,因此任何开发人员都可以轻松找出这些配置,而不是去任何特定的服务类然后检查。

在您的情况下,您可以将 @EnableConfigurationProperties 注释与 @SpringBootApplication 注释结合使用。

于 2021-12-28T06:19:55.663 回答
0

它是令人愉快的,记录在案的,并且可能是“无与伦比的”(仅限于:“限制”(没有SpEL -> 辅助函数!?;))。

要使用@ConfigurationPropertiesbean,您可以像注入任何其他 bean 一样注入它们,如以下示例所示:

@Service
public class MyService {

   private final SomeProperties properties;
   ...

唯一的问题可能来自“深度”,而不是“拥有”(配置)结构......并且可能来自“辅助功能”。

prefix = "application"声音”很可疑!

笔记:

[大多数 - 几乎所有](官方)spring*引导属性,已经是“类型安全的”,并且在spring-boot-autoconfigure 包中具有它们的对象/类表示。

请研究那个“类型安全章节”,还要注视PropertySource Abstraction

于 2021-12-28T16:57:06.410 回答