假设我们有一个简单的类,如下所示。我们可以在默认构造函数中使用它。我真的很好奇是否有可能通过Spring框架中的构造函数将参数/参数传递给另一个对象。为了解释我想做什么,请 请参阅下面的代码示例。
@Component
public class Class{
String text = null;
String text2 = null;
Class( text, text2 ){
super();
this.text = text;
this.text2 = text2;
}
@Overide
public void toString(){
System.out.printf( "Text" + text + ", " + "Text2" + text2);
}
/** Methods and Setter/Getter etc. **/
}
在定义了class和Spring注释之后,我想通过Spring调用这个对象。
public class Usage{
@Autowired
Class classExample;
public void method(){
String text = "text";
String text2 = "text2";
/** One way can be using setters **/
classExample.setText(text);
classExample.setText2(text2);
System.out.println( classExample.toString() );
/** Another way can be using a method **/
classExample.set(text, text2);
System.out.println( classExample.toString() );
/**What I wanted is calling it via constructor injection dynamically**/
/** Normal way we could call this **/
//classExample = new Class(text, text2);
//System.out.println( classExample.toString() );
}
}
是否可以将参数动态注入另一个对象。
答案 0 :(得分:1)
如果使用spring xml配置,则可以使用constructor-arg参数。
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg type="int" value="7500000"/>
<constructor-arg type="java.lang.String" value="42"/>
</bean>
但请记住,bean的默认范围是单例!
是否可以将参数动态注入另一个对象。
让我们创建一个“动态”bean,所以让我们将bean的范围设置为prototype来获得它被调用的新实例evrytime。
<bean id="exampleBean" class="examples.ExampleBean" scope="prototype">
<constructor-arg type="int" value="#{getRandomNumber}"/>
</bean>
在这种情况下,每次使用新的随机数创建新bean时。
答案 1 :(得分:0)
你应该看看FactoryBean