Я пытаюсь подключить класс через конструктор.
@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.
Может кто-нибудь, пожалуйста, скажите мне, где я здесь ошибаюсь. Спасибо.
Аргументом конструктора должен быть конкретный класс.
Чего вы пытаетесь этим добиться? Я не могу придумать ни одного допустимого варианта использования, в котором имеет смысл подключать экземпляр класса. Тем не менее, я очень хочу учиться.




Он говорит вам, что он не может найти класс класса, помеченный как 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
Я думаю это полезно для тебя
Ошибка сообщает вам, что именно не так ... Должен быть экземпляр класса
Class, но я сомневаюсь, что это произойдет.