#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.