Невозможно выполнить Autowire через конструктор

Я пытаюсь подключить класс через конструктор.

@Component
public class Test<T extends Something>{

@Autowired
public Test(Class<T> entity)
doSomething(enity);
}
...

Когда я запускаю код, я получаю сообщение об ошибке

Parameter 0 of constructor in com.test.Test required a bean of type 'java.lang.Class' that could not be found.
Action:
Consider defining a bean of type 'java.lang.Class' in your configuration.

Может кто-нибудь, пожалуйста, скажите мне, где я здесь ошибаюсь. Спасибо.

Ошибка сообщает вам, что именно не так ... Должен быть экземпляр класса Class, но я сомневаюсь, что это произойдет.

M. Deinum 13.11.2018 20:09

Аргументом конструктора должен быть конкретный класс.

LunaticJape 13.11.2018 20:32

Чего вы пытаетесь этим добиться? Я не могу придумать ни одного допустимого варианта использования, в котором имеет смысл подключать экземпляр класса. Тем не менее, я очень хочу учиться.

Makoto 14.11.2018 00:27
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Он говорит вам, что он не может найти класс класса, помеченный как Bean и т. д. Итак, вам нужно, чтобы класс, который нужно внедрить, был объявлен как @Bean, @ Component и т. д.

Вот пример:

@Configuration
    public class Config {

        @Bean
        public<T> Class<T> tClass(){
            return (some class to be returned);// you need to generify or pass some type of class which you want 
        }

    }


    //Here is injecting with no problems
        @Component
        public class Test<T> {

            private Class<T> tClass;

            @Autowired
            public Test(Class<T> tClass) {
                this.tClass = tClass;
            }
        }

Как лучше определить такую ​​архитектуру, которая в данном случае была бы лучше:

  public interface Foo<T> {

         Class<T> getClassFromType();
    }

@Component
public class FooIntegerImpl implements Foo<Integer>{


    @Override
    public Class<Integer> getClassFromType() {
        return Integer.class;
    }
}

@Component
public class FooStringImpl implements Foo<String>{

    @Override
    public Class<String> getClassFromType() {
        return String.class;
    }
}

@Component
public class Test {

    private List<Foo> foo;

    @Autowired
    public Test(List<Foo> foo) {
        this.foo = foo;
    }

}

Для таких целей, например, вы можете определить общий API, который будет общим для всех случаев, на самом деле вы можете определить AbstractCrudOperations и определить грубые вещи, когда кому-то нужно наследовать, он определит тип объекта, который должен быть внутри, и будут определены некоторые методы

На самом деле в вашем случае я не знаю логики, которую вы хотите реализовать, но основная ошибка заключается в том, что класс не может быть найден как bean

Я думаю это полезно для тебя

Другие вопросы по теме