Объект Autowired равен нулю при создании модели

#java #spring #autowired

Вопрос:

Я борюсь со спокойной простой проблемой. При создании модели для моей службы с помощью Autowired объект все время равен нулю. Вот как я определяю свои компоненты. Контроллер

 @RequestMapping("")
@RestController
@Log
public class Controller {

    @Autowired
    private JiraService jiraService;
...
 

Обслуживание:

 @Component
@Getter
@Setter
@Log
public class JiraService {
    @Autowired
    JiraClientModel jiraClientModel;

    public JiraService(@Value(value = "${jira.credentials.userName}") String userName,
                       @Value(value = "${jira.credentials.password}") String password,
                       @Value(value = "${jira.url}") String url,
                       @Value(value = "${jira.jql.query}") String query) throws URISyntaxException {
        jiraClientModel.setSomeValues // here I want to assign some of my values but Model is null

    }

 

И моя Модель:

 @Component
@Getter
@Setter
public class JiraClientModel {
    private SearchRestClient searchRestClient;
    private String query;
}

 

Ответ №1:

Создает ли ваше приложение экземпляр JiraClientModel где-нибудь (в методе с аннотацией @Bean )?

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

 @Component
@Getter
@Setter
@Log
public class JiraService {

    private final JiraClientModel jiraClientModel = new JiraClientModel();

    public JiraService(@Value(value = "${jira.credentials.userName}") String userName,
                       @Value(value = "${jira.credentials.password}") String password,
                       @Value(value = "${jira.url}") String url,
                       @Value(value = "${jira.jql.query}") String query) throws URISyntaxException {
        // ...
    }
 

Кроме того, @Autowired инъекции больше не рекомендуются, инъекции конструктора-это путь для современной весны.

Лично я не вижу особой пользы в том, чтобы обычные объекты создавались Spring вместо того, чтобы просто создаваться «обычным» способом Java — я в основном использую внедрение зависимостей при работе со службами или компонентами.

Комментарии:

1. Ну, это работает, но что, если я захочу добавить в модель объекты с автоматической проводкой? Тогда компонент не может быть инициализирован с помощью «new».

2. В вашем @Configuration классе у вас может быть метод public JiraClientModel jiraClientModel с аннотацией @Bean , который должен возвращать этот объект. Но, как я уже писал ранее, я бы все равно не стал вводить @Autowired обычные классы Java.