Как Guice заполняет аннотированные поля

Ради моего собственного образования я хотел создать простую структуру внедрения зависимостей, которая работает аналогично тому, как это делает Google Guice. Таким образом, когда класс загружается, он предварительно заполняет аннотированные поля данными из фабричного класса.

Я использую Reflections для сканирования всех моих фабричных классов во время компиляции и сохранения этих классов в статическом списке, чтобы, когда придет время загружать мои классы, у меня была ссылка на мои фабрики, которые я мог затем сканировать и возвращать методы соответствующие данные.

На чем я застрял, так это на том, как предварительно заполнить аннотированные поля моих классов, фактически не выполняя никакой работы в реальном классе. Другими словами, когда класс загружается, мне нужно иметь возможность определить, аннотированы ли какие-либо поля определенной аннотацией, и, если да, получить значение из фабричного класса.

Есть ли какой-нибудь способ выполнить отражение класса прямо перед его загрузкой, предварительно заполнить определенные поля, а затем вернуть экземпляр этого класса для использования?

Я мог бы расширить все свои классы, требующие внедрения зависимостей. с базовым классом, который делает всю эту работу, но я полагаю, что должен быть лучший способ, чтобы я мог просто использовать @Inject (или любую аннотацию, которую я решил использовать, чтобы сказать, что это поле требует DI) и «волшебным образом» все работа сделана.

5
задан ryandlf 5 March 2012 в 14:41
поделиться