spring-boot配置-属性和服务层注入

Sping-boot configuration-properties and service layer injection

我是 spring 依赖注入的新手,我想了解最佳实践。我想知道将用 @ConfigurationProperties 注释的 classes 注入服务层 classes(用 @Service 注释)是否是一个好的设计理念。我正在尝试将 application.yml 中的属性映射到配置 -class,如下所示 -

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

然后我在服务层注入上面的配置 class 如下 -

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

我很想知道我是否可以改进我当前的实现 - 不确定是否可以将 configuration classes 传递给 service-layer classes .我也很想知道是否有更好的方法来连接 ApplicationConfig 而无需使用 EnableConfigurationProperties 注释。

这没有硬性规定,因为在 Spring 引导中,我们可以在带有构造型注释的 class 级别添加 @EnableConfigurationProperties。

作为良好实践的一部分,EnableConfigurationProperties 或任何配置都应该是 Configuration class of or main spring boot class 的一部分,这样任何开发人员都可以轻松找出这些配置去任何特定服务 class 然后检查。

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

同意,documented, and probably "unrivaled" (only bounded by: "limitations" (no SpEL -> 辅助函数!?;))。

To work with @ConfigurationProperties beans, you can inject them in the same way as any other bean, as shown in the following example:

@Service
public class MyService {

   private final SomeProperties properties;
   ...

唯一的问题可能来自“深层”,而不是“拥有”(config) 结构......并且可能来自“辅助函数”。

但是

prefix = "application"“听起来”很可疑!

注:

[大多数 - 几乎所有](官方)spring* 引导属性,已经是“类型安全的”,并且在 spring-boot-autoconfigure packages.

中有它们的 object/class 表示

请学习"typesafe chapter", but also gazing at PropertySource Abstraction.