Spring: NullPointerException при добавлении bean-компонента для статического свойства - PullRequest
0 голосов
/ 30 апреля 2018

Мой основной класс выглядит следующим образом:

package main;

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

public class Main {

    public static MySpringBeanWithDependency mySpringBeanWithDependency;

    @Autowired
    public void setTest(MySpringBeanWithDependency mySpringBeanWithDependency) {
        Main.mySpringBeanWithDependency = mySpringBeanWithDependency;
    }

    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        mySpringBeanWithDependency.run();
    }

}

И мой класс AppConfig выглядит следующим образом:

package main;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import testbean.MySpringBeanWithDependency;
import writer.NiceWriter;
import writer.Writer;

@PropertySource("atm.properties")
@Configuration
public class AppConfig {

    @Bean
    public MySpringBeanWithDependency mySpringBeanWithDependency() {
        return new MySpringBeanWithDependency();
    }

    @Bean
    public Writer writer() {
        return new Writer();
    }

    @Bean 
    public NiceWriter niceWriter() {
        return new NiceWriter();
    }

}

Хотя я создаю экземпляр компонента с именем mySpringBeanWithDependency и присваиваю его статическому полю, команда метода run () выбрасывает исключение NullPointerException.

Я видел этот обходной путь для введения статических полей в некоторых ответах, но я думаю, что он не работает для меня. Может кто-нибудь указать, где я иду не так и как мне этого добиться?

1 Ответ

0 голосов
/ 30 апреля 2018

Main не является бобом и не является его экземпляром. Я уверен, что может быть способ внедрить ваш bean-компонент в статическое поле, но было бы гораздо больше смысла извлекать bean-компонент из контекста приложения, когда вам это нужно:

public static void main(String[] args) {
    ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
    MySpringBeanWithDependency bean = context.getBean(MySpringBeanWithDependency.class);
    bean.run();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...