получение nullPointerException при доступе к объекту после автопроводки с использованием @Autowired - PullRequest
0 голосов
/ 01 марта 2020

У меня есть Inteface C, хочет получить доступ к getClassName () в двух других классах. Исключение происходит в method1 () при доступе к a.getClassName ().

public interface C {
void getClassName();
}
@Component
public class A implements C{
    @Override
    public void getClassName() {
        System.out.println(" IN A");
        }
}
@Component 
public class B implements C{
    @Override
    public void getClassName() {
        System.out.println(" IN B");
    }
}

Main Class

@Configurable
public class D {
    @Autowired
     A a;
    @Autowired
     B b;
    void method1() {
        a.getClassName();
    }
    void method2() {
        b.getClassName();
    }
    public static void main( String args[]) {
        D d =new D();
        d.method1();
        d.method2();
    }
} 

Я прочитал несколько блогов и попробовал Автоматическую разводку D как хорошо, но все же исключение.

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Размещение аннотаций Spring на самом деле не означает, что вы используете Spring в проекте.

Должен быть какой-то код bootstrap, который создает для вас контекст приложения и устанавливает правила того, где bean (классы, отмеченные @Component в этом случае) должны быть найдены (политика сканирования).

Кроме того, @Configurable, вероятно, не та аннотация, которую вы ищете (она действительно существует и обычно используется с Связанные с AspectJ вещи, но не для этого варианта использования).

Возможно, вы пытаетесь использовать здесь весеннюю загрузку, поэтому попробуйте следующий подход:

  1. Go to: start.spring.io
  2. Настройте артефакт по вашему выбору (go с помощью Jar в отличие от WAR)
  3. Загрузите и откройте pom. xml в IDE
  4. Добавьте компоненты в пакет под пакетом, в котором вы найдете файл, сгенерированный с аннотацией @SpringBootApplication и имеющий метод main
  5. Запустите проект
0 голосов
/ 01 марта 2020

Это похоже на код весенней загрузки. main () должен иметь метод SpringApplication.run(). D не предоставляется экземплярами A и B в этом коде, поэтому ошибка. Вы можете использовать следующий код после удаления основного класса из класса D -

@SpringBootApplication
public class DemoApplication {

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

        SpringApplicationBuilder builder = new SpringApplicationBuilder(DemoApplication.class);
        ConfigurableApplicationContext ctx = builder.run(args);

        A a = (A) ctx.getBean("a");
        B b = (B) ctx.getBean("b");

        D d = new D(a, b);
        d.method1();
        d.method2();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...