Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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 Spring Di通过setter动态构造函数参数_Java_Spring_Dependency Injection - Fatal编程技术网

Java Spring Di通过setter动态构造函数参数

Java Spring Di通过setter动态构造函数参数,java,spring,dependency-injection,Java,Spring,Dependency Injection,我是spring框架的初学者,下面是通过setter应用DI的教程。所有这些都可以正常工作,但我想在类中添加一个构造函数CsvOutputGenerator,该构造函数带有一个动态参数,在我从应用程序上下文获取bean时动态传递 我该怎么做 我已经用这种方式更改了spring配置: ... <bean id="CsvOutputGenerator" class="com.mkyong.output.impl.CsvOutputGenerator"> <construct

我是spring框架的初学者,下面是通过setter应用DI的教程。所有这些都可以正常工作,但我想在类中添加一个构造函数CsvOutputGenerator,该构造函数带有一个动态参数,在我从应用程序上下文获取bean时动态传递

我该怎么做

我已经用这种方式更改了spring配置:

...
<bean id="CsvOutputGenerator" class="com.mkyong.output.impl.CsvOutputGenerator">
    <constructor-arg type="java.lang.String" value="Test"/>
</bean>
...
。。。
...

但在这种情况下,我的构造函数是静态值。

例如,您可以通过系统属性传递它

<constructor-arg lazy-init="true" type="java.lang.String" value="#{ systemProperties['some.key']}"/>

例如,您可以通过系统属性传递它

<constructor-arg lazy-init="true" type="java.lang.String" value="#{ systemProperties['some.key']}"/>

尝试其他方法,即使Spring不是这样使用的(请注意“原型”范围):


是我在上面使用的API中的方法。

尝试其他方法,即使Spring不是这样使用的(请注意“原型”范围):


是我在上面使用的API中的方法。

以下内容基于上述问题和评论。 假设你有一个带有属性字符串url的类URLEPO。url已初始化为值。 然后你可以这样做,连接你的CsvOutputGenerator

public class URLRepo {
     private String url = "your value";
     getters and setters
}


<bean id="urlRepo" class="com.*.*.MyURLRepo"/>    

<bean id="CsvOutputGenerator" class="com.mkyong.output.impl.CsvOutputGenerator">
    <constructor-arg type="java.lang.String" value="urlRepo.url"/>
</bean>
公共类urrepo{
私有字符串url=“您的值”;
接球手和接球手
}

希望这就是您想要的。

以下内容基于上述问题和评论。 假设你有一个带有属性字符串url的类URLEPO。url已初始化为值。 然后你可以这样做,连接你的CsvOutputGenerator

public class URLRepo {
     private String url = "your value";
     getters and setters
}


<bean id="urlRepo" class="com.*.*.MyURLRepo"/>    

<bean id="CsvOutputGenerator" class="com.mkyong.output.impl.CsvOutputGenerator">
    <constructor-arg type="java.lang.String" value="urlRepo.url"/>
</bean>
公共类urrepo{
私有字符串url=“您的值”;
接球手和接球手
}

希望这就是您要查找的内容。

您是指其他配置文件吗?当我从ApplicationContext获取bean时,我想从我的源代码中传递它。默认情况下,它在初始化应用程序上下文时设置属性,您需要惰性初始化,在初始化之前,您需要设置系统属性以传递它。您制作了一个惰性初始化示例?在回答中更新,然而,这似乎是一个好主意,只是为了学习的目的,如果它是真正的应用程序,那么最好不要继续依赖于这样的初始化,并在初始化属性后通过代码手动设置属性谢谢你的建议,但是有一些类,比如文件类,在它们的构造函数中执行一些操作,例如:newmyclassfile(“mypath”)。如何解决这种情况?是指从另一个配置文件?当我从ApplicationContext获取bean时,我想从我的源代码中传递它。默认情况下,它在初始化应用程序上下文时设置属性,您需要惰性初始化,在初始化之前,您需要设置系统属性以传递它。您制作了一个惰性初始化示例?在回答中更新,然而,这似乎是一个好主意,只是为了学习的目的,如果它是真正的应用程序,那么最好不要继续依赖于这样的初始化,并在初始化属性后通过代码手动设置属性谢谢你的建议,但是有一些类,比如文件类,在它们的构造函数中执行一些操作,例如:newmyclassfile(“mypath”)。如何解决这种情况?我按照您的指示进行了操作,但得到了以下错误消息:“无法解决方法‘getBean(java.lang.String,java.lang.String)’”,我建议使用较新的Spring版本。Spring现在的最新版本是4.0.5,而您正在测试的教程使用的是2.5.6。这个版本已经发布了将近6年了。我遵循了您的指示,但是我得到了这个错误消息:“无法解析方法‘getBean(java.lang.String,java.lang.String)’”我建议使用一个更新的Spring版本。Spring现在的最新版本是4.0.5,而您正在测试的教程使用的是2.5.6。这个版本已经发布近6年了。