web-dev-qa-db-ja.com

AnnotationConfigApplicationContextはまだ更新されていません-何が問題なのですか?

非常に基本的な春のアプリケーションが機能しなくなり、何が起こったのか理解できません。 pom.xml:

<properties>
    <spring.version>4.1.1.RELEASE</spring.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
</dependencies>

構成クラス:

@Configuration
public class MyConfig {

@Bean
public HelloWorld helloWorld() {
         return new HelloWorld();
    }
}

Beanクラス:

public class HelloWorld {
    private String message;

    public void setMessage(String message) {
        this.message = message;
    }
    public String getMessage() {
         return message;
    }
}

アプリケーションのエントリポイント:

public class MainApp {
public static void main(String[] args) {
    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
    ctx.register(MyConfig.class);
    HelloWorld bean = ctx.getBean(HelloWorld.class);
    bean.setMessage("ladjfaj");
    System.out.println(bean.getMessage());
}
}

エラーが発生します

スレッド「メイン」の例外Java.lang.IllegalStateException:org.springframework.context.annotation.AnnotationConfigApplicationContext@6ebf8cf5は、org.springframework.context.support.AbstractApplicationContext.assertBeanFactoryActive(AbstractApplicationContext.Java:943)でまだ更新されていません。 springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.Java:967)at com.nikolas.config.MainApp.main(MainApp.Java:12)

12
Nikolas

ctx.refresh()を呼び出す前にctx.getBean(HelloWorld.class);を呼び出す必要があります

17
Jens

ctx.refresh()を明示的に呼び出さない場合は、ApplicationContextをnew AnnotationConfigApplicationContext(MyConfig.class)のように初期化するだけで、設定が暗黙的に登録および更新されます