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