Доступ к classType обобщенных элементов в компоненте с автопроводкой - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть компонент, который автоматически подключен к моему контроллеру,

Вот код моего компонента:

@Component
public class Utils<T> {

    @Autowired
    ObjectMapper objectMapper;

    private Class<T> mappedClass;

    public Utils(Class<T> mappedClass) { this.mappedClass = mappedClass; }

public T builder(String stringJson, T object) {
       /* doing staff ...*/
        return objectMapper.readValue(new TreeTraversingParser(jsonNode), mappedClass);
    }

}

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

Не удалось выполнить автоматическое подключение.Бобы типа «Класс» не найдены.Проверяет проблемы с автопроводкой в ​​классе компонента.

, и когда я запускаю свою весеннюю загрузку, он говорит:

Параметру 0 конструктора в ca.util.Utils требуется компонент извведите 'java.lang.Class', который не может быть найден.

Действие:

Рассмотрите возможность определения bean-компонента типа 'java.lang.Class' в вашей конфигурации.

Как мне этого избежать?

1 Ответ

0 голосов
/ 26 сентября 2018

Вы не показываете, как пытаетесь установить Utils, поэтому у нас нет всей необходимой информации.

Ваша первая проблема заключается в том, что вашему @Component нужен аргумент конструктора.Вы можете решить эту проблему, если создаете экземпляр своего компонента с помощью версии ApplicationContext.getBean, которая передает параметры.

В качестве альтернативы, вы можете предоставить аргумент конструктора, используя аннотацию @Qualifer (дать имя аргументу конструктора, а затем предоставить его в другом месте).)

Другая проблема заключается в том, что в качестве @Component используется необработанный родовой тип.Я не видел этого, поэтому я не уверен, что это возможно.Для @Component Spring необходимо создать экземпляр конкретного класса.

...