Внедрение зависимостей Spring - инструментарий отражения / байт-кода - PullRequest
0 голосов
/ 22 июля 2011

Когда я хочу использовать внедрение зависимостей с каким-то конструктором не по умолчанию, то есть с параметрами, Spring должен использовать для этого инструментарий байтового кода, верно? Потому что отражение AFAIK поддерживает только конструктор по умолчанию?

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

Reflections поддерживает любое количество аргументов, например, у меня есть класс TestClass, который принимает два аргумента в одном из своих конструкторов:

public TestClass(int test1, String test) {
    System.out.println(test1 + test);
}

Я бы вызвал этот конструктор через отражение следующим образом:

    Constructor<TestClass> constructor = TestClass.class.getConstructor(Integer.class, String.class);
    TestClass test = constructor.newInstance(1, "test");
0 голосов
/ 22 июля 2011

Отражение.

Пожалуйста, проверьте исходный код класса

org.springframework.beans.factory.support.ConstructorResolver Метод: защищенный BeanWrapper autowireConstructor (...)

вызывает =>

org.springframework.beans.factory.support.SimpleInstantiationStrategy Метод: открытый объект (...)

вызывает =>

org.springframework.beans.BeanUtils Метод: открытый статический объект instantiateClass (конструктор ctor, объект [] args)

, который использует Reflection для создания компонента

...