Spring Boot Autowired выдает исключение NullPointerException в Main() при использовании поля [дубликат]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring Boot Autowired выдает исключение NullPointerException в Main() при использовании поля [дубликат]

Сообщение Anonymous »

Примечание. Я обновляю этот вопрос, так как нашел решение.
Этот вопрос аналогичен вопросу «Почему мое поле Spring @Autowired имеет значение null?», но я использую метод main() здесь. Решение состоит в том, чтобы пометить Foo с помощью @Component и автоматически подключить его к Main с помощью метода @PostConstruct. Я узнал об этом из раздела «Как использовать ссылки (@Autowired) из метода main(String[] args)»?
В PostContruct: зачем использовать @PostConstruct?

Код: Выделить всё

@PostConstruct
гарантирует, что все bean-компоненты полностью инициализированы перед выполнением (включая класс bean-компонента, который вы активно редактируете).
Но более серьезной проблемой было то, что я делал Foo foo = new Foo() . foo находится вне контекста Spring, и я управляю 100% его жизненного цикла. Верните все в руки Spring, подключив все автоматически:
Новый Main.java

Код: Выделить всё

package org.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.annotation.PostConstruct;

@SpringBootApplication
public class Main {
@Autowired
Foo foo;

public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}

@PostConstruct
public void test() {
foo.message();
}
}
Новый Foo.java

Код: Выделить всё

package org.example;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Component
@Slf4j
public class Foo {

@Autowired
Bar bar;

public Foo() {
log.info("Foo bean created");
}

public void message() {
log.info(bar.getWord());
}

}
Исходный вопрос приведен ниже:
Я просмотрел множество руководств Spring, в которых это делается таким образом, и это никогда не работает с моей стороны. Понятия не имею, что я делаю не так, но мне серьезно нужна помощь, чтобы разобраться в этом.
Main.java

Код: Выделить всё

package org.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);

Foo foo = new Foo();
foo.message();
}
}
Foo.java

Код: Выделить всё

package org.example;

import org.springframework.beans.factory.annotation.Autowired;

public class Foo {

@Autowired
Bar bar;

public void message() {
System.out.println(bar.getWord());
}

}

Bar.java

Код: Выделить всё

package org.example;

import org.springframework.stereotype.Component;

@Component
public class Bar {
String word = "word";

public String getWord() {return word;}
}

pom.xml

Код: Выделить всё

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

org.example
untitled
1.0-SNAPSHOT


17
17
UTF-8




org.springframework.boot
spring-boot-starter
2.7.5





При запуске из Main() я получаю:

Код: Выделить всё

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "org.example.Bar.getWord()" because "this.bar" is null
at org.example.Foo.message(Foo.java:11)
at org.example.Main.main(Main.java:14)
Они все находятся в одном каталоге/пакете. Я занимаюсь этим уже два часа и понятия не имею, почему это не работает. Буду очень признателен за любую помощь в этом вопросе.
Что я пробовал:
  • Используя @Autowired для создания bean-компонента, который Могу использовать на другом занятии.
Что я ожидал:
  • Строковое слово для вывода на консоль.
  • Насколько я понимаю, класс с @Component может быть использован Spring как bean-компонент, если вы используете @Autowired для его внедрения. Я выполнил эти критерии и не получил ожидаемого результата.
Что на самом деле получилось:
  • Исключение NullPointerException


Подробнее здесь: https://stackoverflow.com/questions/743 ... using-fiel
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему Spring Dependency Injection @Autowired выдает исключение NullPointerException в сервлете?
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • NullPointerException для компонента Springboot @Autowired в перехватчике [дубликат]
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как имитировать HashMap в тесте JUnit в Spring Boot (выдает исключение nullpointerException)
    Anonymous » » в форуме JAVA
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Поле @Autowired возвращает NullPointerException (с использованием Neo4J)
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Spring boot @Autowired не работает в модульном тесте
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»