我目前正在使用的项目使用camel作为路由框架。 在spring中配置camel context时,我们传递一个属性文件,其中包含配置camel路由或控制运行时行为时所需的一堆全局属性:
<camel:camelContext xmlns="http://camel.apache.org/schema/spring" id="my-id">
<camel:propertyPlaceholder location="my-system.properties" id="global-properties"/>
...
</camel:camelContext>
并说my-system.properties有一个如下条目:
my-system.properties
# Global properties that control my-system configuration and run time
...
foo={{bar}}
...
配置路由时,我可以使用foo
表示法访问{{foo}}
属性。使用@PropertyInject
注释的其他bean也可以使用它。但是,在我的设计中有一个用例,当一个普通的POJO不是由spring创建的(而是一个enum而不是相关的)需要访问我的foo
属性。因为这个POJO传递了CamelContext作为方法参数,所以我觉得我应该能够从那里获得foo
的值。但是我花了一点时间,不知道自己是怎么做的。
我知道我可以再次加载属性文件,甚至可以获取系统属性System.getProperty("bar")
,一切都会起作用,但它看起来像是在欺骗我。
答案 0 :(得分:2)
CamelContext上有一个api来解析属性占位符 - 它是resolvePropertyPlaceholders
方法:
答案 1 :(得分:0)
如果你的POJO不是由SpringContext管理的,我不会看到你可以自动注入属性的任何方式。虽然您的方法可能看起来不那么花哨或优雅,但它的优点是不会通过使用其他注射工具给您带来任何开销。