Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mule ESB read@Value属性位于可调用类之外_Java_Spring_Mule_Mule Esb - Fatal编程技术网

Java Mule ESB read@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

如何在MuleESB上实现可调用接口的类外部读取@Value属性?在我的例子中,某些属性

  • main类中的onCall方法不为null(ok)
  • 在类B中的foo()methid处为null(错误)
如何在foo()方法中获取此值?我不想把它作为参数传递

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); 
    }
}