java - Apache Camel Bean 中的动态 PropertyInjection

标签 java spring-boot dependency-injection apache-camel

我使用 @PropertyInject 注释从 application.properties 文件获取属性以在我的 bean 中使用。
这通常工作正常,但现在我需要能够根据 header 值更改注入(inject)的属性。 在我看来,它看起来像这样:

@PropertyInject(PROPERTY_NAME)  
private String property;

public void pickProperty(String msgVersion) {
        if (msgVersion.equals("A")) {
            PROPERTY_NAME = "property.firstType.name";  
        } else {
            PROPERTY_NAME = "property.secondType.name";
        }
    }

我考虑过只注入(inject)两个属性并在主方法中决定使用哪个属性,但这似乎是一种迂回的做法,如果添加更多版本,就会变得有点臃肿。
有没有简单的方法可以做到这一点?

最佳答案

now I need to be able to change the injected property based on a header value

属性和 Bean 是在应用程序启动时创建的,并且通常在应用程序运行时不会更改。它们都有适用范围。

另一方面, header 值可能会因应用程序处理的每条消息而发生变化

正如您自己所建议的:您可以将这两个属性注入(inject)到 Bean 中,并提供一个方法,每个消息调用一次以获得正确的值

@PropertyInject(PROPERTY_A)  
private String propertyA;
@PropertyInject(PROPERTY_B)  
private String propertyB;

// called for every message processing
public String pickProperty(@Header("msgVersion") String msgVersion) {
    if (msgVersion.equals("A")) {
        return propertyA;
    } else {
        return propertyB;
    }
}

这根本不是一种解决方法,而只是一种根据输入返回不同结果的方法。

关于java - Apache Camel Bean 中的动态 PropertyInjection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60597584/

相关文章:

wpf - 解析结构图中的窗口或如何管理 WPF MVVM 中的多个窗口?

spring-boot - pom.xml 中的 spring cloud 和 spring boot 兼容性问题

.net - 依赖注入(inject)的惰性解析

c# - Ninject 'Get'方法可以缓存值吗?

用于读取包含多个文件的 multipart/form-data http 正文的 Java 库

java - spring boot如何从自定义yml加载属性

spring-boot - Spring Boot 负载均衡

java - 项目再次启动(更新)后如何保护我的数据库值?

java - JSF数字时钟

java - Lucene 区分大小写和不区分大小写的搜索