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.
我是 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.
请学习"typesafe chapter", but also gazing at PropertySource Abstraction.