Запускайте метод каждый раз, когда в классе используется конкретная аннотация - PullRequest
1 голос
/ 05 марта 2012

Скажем, у меня есть класс с несколькими полями, помеченными пользовательской аннотацией. В моем случае это @inject, потому что он используется для внедрения зависимости. Как я могу запустить метод в отдельном классе каждый раз, когда аннотация используется в моем классе? Другими словами, каждый раз, когда класс загружается, аннотация запускает метод, который будет собирать данные поля и, в свою очередь, устанавливать поле.

У меня уже есть вся система, настроенная для сбора ресурсов, но мне нужно некоторое руководство о том, как на самом деле запустить этот код, когда загружен класс с аннотацией @inject. Это можно сделать, определив какой-то метод в интерфейсе аннотации, который выполняет сбор данных?

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

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

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

Я задумался над этой проблемой.На самом деле вы не можете запускать код автоматически до загрузки класса (если только он не является фильтром сервлета и т. Д.).В моей ситуации ответ состоял в том, чтобы создать экземпляр на основе определенного класса, который уже содержал нужные мне данные ресурса.Аналогично тому, как это делает Google Guice.

См. Этот вопрос для получения дополнительной информации: Как Guice заполняет аннотированные поля

0 голосов
/ 05 марта 2012

Вы можете использовать инжекторы из Google Guice или Spring Framework.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...