0

私は、Spring 2.5 の後に導入された Annotation Driven Spring にかなり慣れていません。私は XML ベースの構成にかなり慣れており、Spring Container をロードする XML アプローチを使用して、Bean を AutoWire に取得する際に問題が発生したことはありません。XML の世界はとてもクールでしたが、その後 Annotation Ville に目を向けたところ、ここにいる人々に簡単な質問があります。ここに私が作成したクラスがあります:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.myspringapp.MyBean;
import com.myspringapp.MySpringAppConfig;

public class TestConfig {

@Autowired
private static MyBean myBean;

public static void main(String[] args) {
    new AnnotationConfigApplicationContext(MySpringAppConfig.class);
    System.out.println(myBean.getString());
}

}

上記は、AnnotationConfigApplicationContext クラスを呼び出す標準の Java クラスです。「MySpringAppConfig」クラスがロードされると、myBean aurowired プロパティへの参照があり、その上で getString メソッドを呼び出すことができるという印象を受けました。ただし、常に null を取得しているため、NullPointerException が発生します。

package com.myspringapp;

import org.springframework.stereotype.Component;

@Component
public class MyBean {

    public String getString() {
        return "Hello World";
    }
}

上は非常に理解しやすいコンポーネント MyBean で、下は構成クラスです。

package com.myspringapp;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MySpringAppConfig {

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

注: (MyBean)ctx.getBean("myBean"); を使用すると、Bean への参照を取得できます。しかし、getBean メソッドを使用したくありません。

4

1 に答える 1

1

私が知っている唯一の方法は、静的フィールドを自動配線することであり、セッターを使用することです。ただし、Spring はオブジェクトを処理する必要があるため、これも機能しませんが、TestConfigクラスはコードで処理されません。依存関係を に注入したい場合はTestConfig、それを Bean として定義できます。

public class MySpringAppConfig {
  @Bean
  public TestConfig testConfig() {
    return new TestConfig();
  }
  .....

次に、次の方法で取得します。

TestConfig tc = (TestConfig) ctx.getBean("testConfig");

その後、SpringmyBeanは setter メソッドを使用して を注入できます。

于 2013-06-16T15:20:43.690 に答える