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