Java Mule ESB read@Value属性位于可调用类之外
如何在MuleESB上实现可调用接口的类外部读取@Value属性?在我的例子中,某些属性:Java Mule ESB read@Value属性位于可调用类之外,java,spring,mule,mule-esb,Java,Spring,Mule,Mule Esb,如何在MuleESB上实现可调用接口的类外部读取@Value属性?在我的例子中,某些属性: main类中的onCall方法不为null(ok) 在类B中的foo()methid处为null(错误) 如何在foo()方法中获取此值?我不想把它作为参数传递 public class MainClass implements Callable { @Value("${some_property}") String some_property; @Override
- main类中的onCall方法不为null(ok)
- 在类B中的foo()methid处为null(错误)
public class MainClass implements Callable {
@Value("${some_property}")
String some_property;
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
System.out.println(some_property); //some_property is ok
ClassB obB = new ClassB();
obB.foo();// some_property inside this method is null
}
}
public ClassB {
@Value("${some_property}")
String some_property;
public void foo() {
System.out.println(some_property);
}
}
编辑:有关我的问题的更多信息
我的MuleESB项目包含位于以下文件中的资源文件:/MY_PROJECT/src/main/resources/services.properties 它包含一些值,如
some_property = AAAA
another_property = BBBB
此文件在my flow.xml文件中引用:/MY_PROJECT/src/main/app/common.xml
<context:property-placeholder location="classpath:services.properties"
order="4" ignore-unresolvable="true" />
我有经常使用的二等B班。我想在前面提到的MainClass中的onCall()方法中运行并使用它
public ClassB {
@Value("${some_property}")
String some_property;
public void foo() {
System.out.println(some_property);
}
}
我想从services.properties文件中加载一些_属性值。我使用以下代码
@Value("${some_property}")
String some_property;
我只想在ClassB foo()方法中读取此值。但是现在有null(而不是设置值的mainclasseoncall()方法)。ClassB是独立的,可以在几个onCall()方法中使用,因此我不想在MainClass中读取这些属性并将它们传递给ClassB构造函数或方法。如何实现这一点?请尝试使用方法注入,现在可以在外部调用MainClass.some\u属性
public static String some_property;
@Value("${some_property}")
public void setSome_property(String prop) {
some_property = prop;
}
我只需要使用构造函数来读取道具文件。如果要创建多个ClassB对象,您可能希望更改此选项,而不是在每个新实例上读取一次文件
public ClassB {
String some_property;
public ClassB() {
Properties p = new Properties();
try {
p.load( this.getClass().getResourceAsStream("your-props-file.properties") );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
some_property = p.getProperty("some_property");
}
public void foo() {
System.out.println(some_property);
}
}
但我不想在主类中访问该属性。我只想在类B中阅读它(MainClass不包含一些_属性)。您想要实现什么,为什么?这还不完全清楚。你能把这个问题澄清一下吗?你的动机还不完全清楚,所以我们帮不了你。非常感谢。@AttilaBujáki感谢您的回复。我已经为这个问题添加了更多细节。您是否尝试将“${some_property}”包装到MEL块中并写入:“@Value”(“#{${file path}”)”?如果这是一个系统属性,那么您也可以通过“system.getProperty(“some_属性”)”访问它。有关详细信息,请参阅官方文档:这似乎是最好的解决方案,因为我在这里只处理一个文件引用。
public ClassB {
String some_property;
public ClassB() {
Properties p = new Properties();
try {
p.load( this.getClass().getResourceAsStream("your-props-file.properties") );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
some_property = p.getProperty("some_property");
}
public void foo() {
System.out.println(some_property);
}
}