如何使用spring注释动态地通过构造函数将参数传递给另一个对象

时间:2014-03-11 09:02:54

标签: spring annotations parameter-passing dynamically-generated constructor-injection

假设我们有一个简单的类,如下所示。我们可以在默认构造函数中使用它。我真的很好奇是否有可能通过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() );

    }
}

是否可以将参数动态注入另一个对象。

2 个答案:

答案 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>

http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-factory-collaborators

但请记住,bean的默认范围是单例!

  

是否可以将参数动态注入另一个对象。

让我们创建一个“动态”bean,所以让我们将bean的范围设置为prototype来获得它被调用的新实例evrytime。

<bean id="exampleBean" class="examples.ExampleBean" scope="prototype">
   <constructor-arg type="int" value="#{getRandomNumber}"/>
</bean>

在这种情况下,每次使用新的随机数创建新bean时。

答案 1 :(得分:0)

你应该看看FactoryBean