Micronaut:如何用@Context 替换@EventListener 与@Singleton 的组合?

问题描述

假设我有一个正在加载一些事件的类:

@Singleton
class EventStarter {

    @Value("${very.important.key}")
    private String key;

    public EventStarter(MyEvents events) {
        this.events = events;
    }

    private final MyEvents events;

    @EventListener
    void onApplicationEvent(ServerStartupEvent event) throws IOException {
        events.register(key);
    }
}

我听说我可以重构此代码以使用 @Context 批注而不是使用 @EventListener。我曾尝试这样做,但我失败了。

我有一个类使用 @Context 注释,如下所示:

@Context
@Singleton
@Requires(property = "JASYPT_ENCRYPTOR_PASSWORD")
public class JasyptDecryptor implements BeanInitializedEventListener<Environment> {

    public JasyptConfigurationPropertiesDecryptor(DefaultEnvironment environment,@Value("${JASYPT_ENCRYPTOR_PASSWORD}") String encryptedPassword) {
        LOGGER.info("JasyptBootstrapDecryptor started");
        processConfigurationProperties(environment,encryptedPassword);
    }

    private void processConfigurationProperties(DefaultEnvironment environment,String encryptedPassword) {
        // unrelated code here
    }

    @Override
    public Environment onInitialized(BeanInitializingEvent<Environment> event) {
        return event.getBean();
    }
}

这个类正在实现BeanInitializedEventListener<Environment>。我应该在我的 EventStarter 类中以某种方式实现它吗?据我了解,它不应该将 Environment 作为一种类型,但它应该是什么? ServerStartupEvent

在某些时候,我达到了这样的境界:

@Context
@Singleton
@Requires(property = "${very.important.key}")
class EventStarter implements BeanInitializedEventListener<ServerStartupEvent> {

    public EventStarter(MyEvents events) {
        this.events = events;
        startEvents()
    }

    private final MyEvents events;

    private void startEvents() throws IOException {
        events.register(key);
    }

    @Override
    public Environment onInitialized(BeanInitializingEvent<ServerStartupEvent> event) {
        return event.getBean();
    }
}

它似乎有效......部分 - 我得到了一个例外,只是很少提到“令牌”,所以似乎这个 ${very.important.key} 是,正如我推测的那样,是空的或空的,所以它不是从application.yml读取。

在这里做错了什么?有没有办法做到这一点?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)