我正在尝试通过构造函数自动装配类。
@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.
有人可以告诉我我在哪里错了。谢谢。
答案 0 :(得分:0)
它说您找不到标记为Bean等的Class类 因此,您需要有一个要注入的类声明为@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作为类
我认为这对您有帮助