Java - Автоматическая реализация шаблона локатора службы с использованием аннотаций - PullRequest
5 голосов
/ 08 июня 2011

Весна почти обеспечивает то, что я хочу. В Spring вы можете просто аннотировать классы с помощью @Component, а затем использовать «context: component-scan», чтобы Spring автоматически выполнял поиск компонентов. Затем вы можете создать контекст приложения и вызвать getBean (String, Class), чтобы получить реализацию любого интерфейса или класса.

Например, если у меня есть интерфейс «Mp3Service» и я хочу зарегистрировать новую реализацию под названием «InternetMp3Service», все, что мне нужно сделать, это добавить аннотацию @Component к определению класса.

Единственная проблема с этим для меня заключается в том, что я хочу использовать все это в апплете, и поэтому я получаю исключение java.lang.RuntimePermission для разрешения "accessDeclaredMembers". Я не хочу подписывать апплет и не хочу создавать явную конфигурацию для bean-компонентов.

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

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

Спасибо.

1 Ответ

2 голосов
/ 08 июня 2011

Этот вариант использования действительно имеет смысл, но я уверен, что никто еще не реализовал его. Я вижу два способа сделать это:

а) с использованием API обработки аннотаций с возможностью смены аннотаций . Проблема здесь в том, что Spring выполняет очень продвинутую логику при сканировании аннотаций, и вам, вероятно, придется заново реализовать ее для процессора аннотаций.

b) использование основного класса, который делает то, что делает Spring (взгляните на источник org.springframework.context.annotation.ComponentScanBeanDefinitionParser, чтобы получить представление о том, с чего начать). Подключите основной класс к сборке maven или ant, чтобы он автоматически выполнялся во время компиляции. Проблема здесь в том, что вам придется работать с скомпилированными классами, а не с исходными кодами, поэтому ваш класс Service Locator не будет доступен во время компиляции.

...