无法通过构造函数自动装配

时间:2018-11-13 19:05:38

标签: java spring spring-mvc

我正在尝试通过构造函数自动装配类。

@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.

有人可以告诉我我在哪里错了。谢谢。

1 个答案:

答案 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作为类

我认为这对您有帮助