Я хотел бы построить свою собственную DI-инфраструктуру на основе аннотаций Java, и мне нужно небольшое руководство, чтобы начать.Я знаю, что было бы намного проще использовать одну из множества замечательных фреймворков, таких как guice или spring, но ради собственного любопытства я хотел бы построить свою собственную.
ЯЯ не очень знаком с аннотациями, поэтому у меня возникли некоторые проблемы с поиском ресурсов, и я был бы очень признателен, если бы кто-то просто изложил несколько шагов, которые мне нужно предпринять, чтобы начать работу.
Как и преждеКак уже упоминалось, id хотел бы использовать фабричный подход и каким-то образом пометить мои получатели аннотацией типа @Resource или @Injectable, а затем в моих бизнес-классах иметь возможность устанавливать переменные зависимости с помощью аннотации @Inject и иметь ресурс автоматически доступным.
Есть ли у кого-нибудь какой-либо ресурс, который он может передать, чтобы помочь мне понять процесс тегирования методов на основе аннотаций и последующего извлечения значений из отдельного класса на основе аннотации.Небольшое направление - это все, что мне нужно, кое-что, чтобы начать меня.И, конечно, я буду рад опубликовать здесь небольшой пример кода, как только я начну, для дальнейшего чтения, конечно, для других.
РЕДАКТИРОВАТЬ
ресурсы, которые я использую, чтобы собрать это вместе:
Отражение Java: аннотации
Как найти аннотации в данном пакете: переполнение стека?
Сканирование аннотаций во время выполнения
На самом деле я еще не закончил писать это, но список основных задач будет следующим (для тех, кто может быть заинтересован в выполнениичто-то похожее в будущем)
Во время сканирования класса для всех полей @Inject и получения типа объекта.
Сканирование всех классов (или простоопределенный пакет классов (я еще не решил)) для аннотированных методов @InjectableResource.
Выполните цикл всех аннотированных методов и найдите метод, который возвращает искомый тип объекта.
Запустите метод и получите зависимость.
Также будет полезно отметить, что при сканировании всех классов я буду использовать библиотеку под названием Javassist.По сути, это позволяет мне читать информацию о байт-коде каждого класса без фактической загрузки класса.Так что я могу читать строки аннотаций, не создавая серьезных проблем с памятью.