Togglz with Kotlin:在我的自定义 ActivationStrategy 中注入一些依赖项的问题
Togglz with Kotlin: Problem to inject some dependency in my custom ActivationStrategy
我已经在 META-INF/Services/ 中定义了引用我的自定义 ActivationStrategy 的文件,正如自定义策略的 Togglz 库所解释的那样 (https://www.togglz.org/documentation/activation-strategies.html),因为我需要解决它是否被激活通过另一个服务中的另一个逻辑。
现在如何注入我需要使用的服务?从尝试以下操作开始:
@Component
class ActivationStrategyByProfile(private val profileService : ProfileService) : ActivationStrategy {
override fun getId(): String {
return ID
}
override fun getName(): String {
return NAME
}
override fun isActive(
featureState: FeatureState,
user: FeatureUser?
): Boolean {
val profileId = user?.name
return profileService.validateProfile(profileId)
}
...
我在 /META-INF/services/org.togglz.core.spi.ActivationStrategy 中的文件包含:
com.saraza.application.config.ActivationStrategyByProfile
它returns下面的错误,提到我在文件中指定的引用,不包括参数,我的理解:
...ActivationStrategyByProfile Unable to get public no-arg constructor
如何注入服务的依赖项?是否可以通过更改JavaServiceLoader机制使用的扩展文件来实现?比如将服务指定为参数?
解决方案非常简单,配置允许您直接指定要实施的策略:
@Bean
fun activationStrategyProvider(
activationStrategies: List<ActivationStrategy>,
activationStrategyByProfile: ActivationStrategyByProfile
): ActivationStrategyProvider? {
val activationStrategyProvider = DefaultActivationStrategyProvider()
activationStrategyProvider.addActivationStrategy(activationStrategyByProfile)
return activationStrategyProvider
}
我已经在 META-INF/Services/ 中定义了引用我的自定义 ActivationStrategy 的文件,正如自定义策略的 Togglz 库所解释的那样 (https://www.togglz.org/documentation/activation-strategies.html),因为我需要解决它是否被激活通过另一个服务中的另一个逻辑。 现在如何注入我需要使用的服务?从尝试以下操作开始:
@Component
class ActivationStrategyByProfile(private val profileService : ProfileService) : ActivationStrategy {
override fun getId(): String {
return ID
}
override fun getName(): String {
return NAME
}
override fun isActive(
featureState: FeatureState,
user: FeatureUser?
): Boolean {
val profileId = user?.name
return profileService.validateProfile(profileId)
}
...
我在 /META-INF/services/org.togglz.core.spi.ActivationStrategy 中的文件包含:
com.saraza.application.config.ActivationStrategyByProfile
它returns下面的错误,提到我在文件中指定的引用,不包括参数,我的理解:
...ActivationStrategyByProfile Unable to get public no-arg constructor
如何注入服务的依赖项?是否可以通过更改JavaServiceLoader机制使用的扩展文件来实现?比如将服务指定为参数?
解决方案非常简单,配置允许您直接指定要实施的策略:
@Bean
fun activationStrategyProvider(
activationStrategies: List<ActivationStrategy>,
activationStrategyByProfile: ActivationStrategyByProfile
): ActivationStrategyProvider? {
val activationStrategyProvider = DefaultActivationStrategyProvider()
activationStrategyProvider.addActivationStrategy(activationStrategyByProfile)
return activationStrategyProvider
}