Внедрение зависимостей с аннотациями

Я хотел бы создать свой собственный каркас DI на основе аннотаций Java, и мне нужно небольшое руководство, чтобы начать работу. Я знаю, что было бы намного проще использовать один из множества замечательных фреймворков, таких как guice или spring, но ради собственного любопытства я хотел бы создать свой собственный.

Я не очень знаком с аннотациями, поэтому у меня небольшие проблемы с поиском ресурсов, и я был бы очень признателен, если бы кто-то просто объяснил несколько шагов, которые мне нужно предпринять, чтобы начать.

Как уже упоминалось, id любит использовать фабричный подход и каким-то образом маркировать мои геттеры аннотацией типа @Resource или @Injectable, а затем в моих бизнес-классах иметь возможность устанавливать мои зависимости переменных с помощью аннотации @Inject и иметь ресурс автоматически доступен.

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

РЕДАКТИРОВАТЬ

Ресурсы, которые я использую, чтобы собрать это вместе:

Отражение Java: Аннотации

Как найти аннотации в данном пакете: Переполнение стека?

Сканирование аннотаций во время выполнения

I на самом деле еще не закончили писать это, но основной список задач будет следующим (для всех, кто может быть заинтересован в том, чтобы сделать что-то подобное в будущем)

  1. Во время выполнения класса сканирование всех полей @Inject и получение типа объекта .

  2. Сканировать все классы (или только определенный пакет классов (я не решил еще)) для аннотированных методов @InjectableResource.

  3. Выполните цикл всех аннотированных методов и найдите метод, который возвращает тип объекта, который я ищу.

  4. Запустите метод и получите зависимость.

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

6
задан Community 23 May 2017 в 10:29
поделиться