Невозможно подключить через конструктор - PullRequest
0 голосов
/ 13 ноября 2018

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

@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 голосов
/ 14 ноября 2018

Он говорит, что не может найти класс 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

Я думаю, что это полезно для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...