gpt4 book ai didi

java - Apache Felix - 如何保证在激活方法之前注入(inject)动态引用

转载 作者:行者123 更新时间:2023-12-02 12:17:44 37 4
gpt4 key购买 nike

这是感兴趣的案例片段:

我们有一些配置类,它可以有多个实例。假设我们在一个 bundle 中提供多种配置。这是一个范围。

@Service
@Component
public class SampleConfigurationImpl implements SampleConfiguration {
// declaration of some properties, init method and etc...
}

我们还有一项使用这些配置的服务:

@Service
@Component
public class SampleServiceImpl implements SampleService {

@Reference(
referenceInterface = SampleConfiguration.class,
cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
policy = ReferencePolicy.DYNAMIC)
private Map<String, SampleConfiguration> sampleConfigurations = new ConcurrentHashMap<>();

private void bindSampleConfigurations(SampleConfiguration sampleConfiguration) {
sampleConfigurations.put(sampleConfiguration.getName(), sampleConfiguration);
}

private void unbindSampleConfigurations(SampleConfiguration sampleConfiguration) {
sampleConfigurations.remove(sampleConfiguration.getName());
}

@Activate
private void init() {
System.out.println(sampleConfigurations.size());
}

}

那么,我能否保证在调用 init 方法时注入(inject)所有配置(至少是当前包)?也许有一些替代方法可以做到这一点。我知道另一个 bundle 可以带来新的配置,并且获得保证是不现实的,但它对只有一个 bundle 的情况感兴趣。

在实践中,可能会出现 init 方法中只有部分配置的情况。特别是当您有多种类型的配置或一个服务使用另一个具有动态引用的服务并且第一个服务依赖于所有内容都被注入(inject)的事实时,情况会更加困难。

最令人不快的是它可以在 init 方法之前和之后绑定(bind)/取消绑定(bind)配置。也许有某种方法可以保证它始终在 init 方法之后绑定(bind)......

我对任何信息都感兴趣。如果能得到两个问题的答案(之前或之后的保证),那就太好了。可能有人有解决此类问题的经验并可以与我分享。

谢谢。

最佳答案

不,据我所知没有。在这种情况下,我通常做的事情(取决于您的用例,这取决于您的激活代码是否可以多次运行)是创建一个“reallyActivate”方法,我从常规激活和bindSampleConfigurations(+设置)中调用activate 中的 isActivated 标志)。然后,每次绑定(bind)新的 SampleConfiguration 时,我都可以执行一些逻辑,即使是在激活之后。这对您的情况有帮助吗?

关于java - Apache Felix - 如何保证在激活方法之前注入(inject)动态引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036135/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com