28

私は春が初めてです。

これは、Bean 登録のコードです。

<bean id="user" class="User_Imple"> </bean>
<bean id="userdeff" class="User"> </bean>

これは私のBeanクラスです:

public class User_Imple implements Master_interface {

    private int id;
    private User user; // here user is another class

    public User_Imple() {
        super();
    }

    public User_Imple(int id, User user) {
        super();
        this.id = id;
        this.user = user;
    }

    // some extra functions here....
}

これは、アクションを実行するための私の主な方法です:

public static void main(String arg[]) {

    ApplicationContext context = new ClassPathXmlApplicationContext("/bean.xml");
    Master_interface master = (Master_interface)context.getBean("user");

    // here is my some operations..
    int id = ...
    User user = ...

    // here is where i want to get a Spring bean
    User_Imple userImpl; //want Spring-managed bean created with above params
}

ここで、このコンストラクターをパラメーターで呼び出したいと思います。これらのパラメーターは、メイン メソッドで動的に生成されます。bean.configこれが、ファイルで宣言されているように静的ではなく、動的に渡したいという意味です。

4

5 に答える 5

31

私が正しければ、正しい答えはgetBean(String beanName, Object... args)メソッドを使用することです。これは引数を Bean に渡します。Java ベースの構成でどのように行われるかをお見せできますが、XML ベースの構成でどのように行われるかを知る必要があります。

@Configuration
public class ApplicationConfiguration {
      
  @Bean
  @Scope("prototype")  // As we want to create several beans with different args, right?
  String hello(String name) {
    return "Hello, " + name;
  }
}

// and later in your application

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfiguration.class);
String helloCat = (String) context.getBean("hello", "Cat");
String helloDog = (String) context.getBean("hello", "Dog");

これはあなたが探しているものですか?


アップデート

この回答には多くの賛成票が集まり、誰も私のコメントを見ません。これは問題の解決策ですが、Spring のアンチパターンと見なされているため、使用しないでください。factory や lookup-method などを使用して正しく処理するには、いくつかの方法があります。

次の SO 投稿を参考にしてください。

于 2014-01-18T09:45:50.100 に答える
5

コンストラクター注入をご覧ください。

また、SpringBeanの他のライフサイクル インターセプトについては、 IntializingBeanとBeanPostProcessorを参照してください。

于 2013-06-08T07:17:47.807 に答える
1

コンストラクター インジェクションが役に立ちます。この場合、属性として ID とユーザーを使用して POJO を生成し、POJO をコンストラクターに渡す必要がある場合があります。構成ファイルのコンストラクター注入では、pojo を参照としてこのコンストラクターを参照できます。したがって、ID と User でデータの動的な値を処理します。

お役に立てれば !!

于 2013-06-10T04:42:28.017 に答える
0

を (Spring Bean ではなく) 通常のPojoUser_Impleにすると、問題が解決するのでしょうか?

<!-- Only use User as a Spring Bean -->
<bean id="userdeff" class="User"></bean>

ジャワ:

public static void main(String arg[])
{
    ApplicationContext context =new ClassPathXmlApplicationContext("/bean.xml");
    User user = context.getBean(User.class);

    int id = // dynamic id
    Master_interface master = new User_Imple(id, user);
}
于 2013-06-08T07:19:23.687 に答える