Autowire не работает для bean-компонента внутри bean-прототипа - PullRequest
0 голосов
/ 30 марта 2019

Я создаю API-интерфейс службы REST и из контроллера REST я хотел бы вызвать другой класс реализации.Из MyController я создаю bean-компонент ServiceImpl, а ServiceImpl использует объект Customer.(Только для тестирования клиента ожидается синглтон)Я пытаюсь получить доступ к bean-компоненту внутри bean-компонента-прототипа, но он не работает с Null Pointer.


@RestController
public class MyController {

    static int i = 0;
    public MyController() {
    System.out.println("Inside Controller");
    }

    @RequestMapping("/")
    public int post(ServiceImpl impl) {
    return impl.name(i++);
    }

}

public class Customer {

    String name;

    public Customer() {
    System.out.println("inside customer cons");
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

}

@Configuration 
public class ServiceConfigurations {

    @Bean
    public Customer Customer() {
    return new Customer();
    }   

}

@Component
@Scope(value = "prototype")
public class ServiceImpl {

    int i = 0;

    @Autowired
    Customer c;

    public int name(int name) {
    c.getName();  // Fails with null pointer
    return i++;
    }

}

Может лиодна подсказка, почему @Autowire for Customer не устанавливает ссылку?

1 Ответ

0 голосов
/ 30 марта 2019

Проблема здесь в вашем ложном ожидании .
Эти строки

@RequestMapping("/")
public int post(ServiceImpl impl)

на самом деле не @Autowire новый ServiceImpl Bean, они просто создают новый экземпляр ServiceImpl. Инъекция не производится вообще.

Обзор областей применения Bean и способы их использования см. В Область применения Spring Bean .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...