1. Java Custom Annotations и Spring
Аннотации Java, как своего рода информацию о метаданных элементах программы (классы, переменные участников, методы участников и т. Д.), Не влияют на выполнение самой программы. Через пользовательские аннотации вы можете добавить специальные декларации в элементы программы.
В качестве платформы для создания приложений на уровне предприятий Spring предоставляет богатые функции. Сочетание пользовательских аннотаций Java с Spring для реализации анализа и обработки аннотаций в конкретных сценариях может снизить степень связи применения и улучшить масштабируемость программы.
2. Сценарии приложения
Следующее обобщает несколько сценариев приложений и только объясняет общую идею (PS: не все сценарии практиковались в проекте)
2.1 Вход, блокировка разрешений
В веб -проектах перехват входа и перехват разрешений - это клише функция. Благодаря пользовательским аннотациям входа в систему или аннотациям разрешений аннотации разыгрывают в пользовательском перехватчике, чтобы реализовать функции входа и перехвата разрешения.
Этот метод использования имеет простую конфигурацию, высокую гибкость и низкую кодовую связь.
2.2 Управление задачами времени
Во время процесса строительства системы будут предназначены различные требования к временным задачам, и централизованное управление временными задачами может более эффективно поддерживать работу системы.
Пользовательские аннотации задачи по времени в главе «Повторные анонты официального документа по аннотации Java» могут реализовать декларацию бизнес -методов задачи времени. В сочетании с весенним контейнером постпроцессора Beanpostprocessor (PS: Pesring Container Postprocessor будет обсуждаться в следующей статье), аналитические аннотации. Аннотация анализируемой аннотации используется для создания задачи времени выполнения с использованием Quartzapi, что может завершить создание времени выполнения и централизованное управление задачей времени.
Этот метод может избежать определения конфигурации задач Quartz Timing и улучшить масштабируемость системы.
2.3 Спецификация источника данных для многоданного источника маршрутизации
AbstractroutingDatasource, предоставляемый пружинными, реализует динамическую маршрутизацию нескольких источников данных и может применяться в архитектуре разделения мастер-рабов. Указав различные источники данных для различных методов, реализуется динамическая маршрутизация источников данных (например: методы чтения идут из источника данных базы данных подчиненной, методы написания от основного источника данных базы данных). Как определить тип источника данных, соответствующий различным методам, может быть реализован с использованием пользовательских аннотаций. Функция маршрутизации источника данных реализуется путем анализа соответствующего типа источника данных, объявленного в методе.
Этот метод позволяет избежать анализа методов сопоставления шаблонов (например: начиная с Select, начиная с обновления и т. Д.), И объявление более гибкое.
Пользовательские аннотации
Давайте посмотрим на самый простой пример. В процессе использования приложений Springweb мы неизбежно используем @Controller, @Service, @Repository и другие аннотации для определения Javabeans. Итак, как вы можете определить аннотацию самостоятельно? Пружина может загружаться автоматически. Итак, есть первый пример.
@Target ({elementtype.type})@hareveration (armentpolicy.runtime)@Doctiped@componentpublic @Interface myComponent {string value () default ";} @ConfigurationPublic Class ComponentationTationTest {public static void main (string [] args) {annotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext (); AnnotationConfigApplicationContext.register (componentantationTest.class); AnnotationConfigApplicationContext.refresh (); InjectClass injectClass = annotationConfigApplicationContext.getBean (injectClass.class); injectClass.print (); } @Mycomponent public static class injectclass {public void print () {System.out.println ("Hello World"); }}}Запустите этот пример, и вы обнаружите, что класс, аннотированный @mycomponent, также загружается весной и может использоваться как обычное Javabean. Проверяя исходный код Spring, вы обнаружите, что Spring использует ClassPathScanningCandidateComponentProvider для сканирования пакета. Этот класс имеет такую аннотацию.
Поставщик компонентов, который сканирует городскую дорожку из базового пакета. Затем он применяется исключать и включать фильтры в полученные классы, чтобы найти кандидатов.
Метод RegisterDefaultfilters этого класса имеет несколько строк кода
Protected void RegisterDefaultfilters () {this.includefilters.add (новый AnnotationTypefilter (component.class)); ClassLoader CL = classPathScanningCandidateComponentProvider.class.getClassLoader (); try {this.includefilters.add (new AnnotationTypefilter (((Class <? Extends Annotation>) classutils.forname ("javax.annotation.managedbean", cl)), false)); logger.debug ("jsr-250 'javax.annotation.managedbean' найден и поддерживается для сканирования компонентов"); } catch (classnotfoundexception ex) {// jsr -250 1.1 API (как включено в Java EE 6) недоступен - просто пропустите. } try {this.includefilters.add (new AnnotationTypefilter (((класс <? Extends Annotation>) classutils.forname ("javax.inject.named", cl)), false)); logger.debug ("jsr-330 'javax.inject.named' аннотация, найденная и поддерживаемая для компонентного сканирования"); } catch (classnotfoundexception ex) {// jsr -330 API недоступен - просто пропустите. }}Здесь вы обнаружите, что использование весенней информации о сканировании класса будет судить только класс, аннотированный @Component, поэтому любая пользовательская аннотация может быть отсканирована к весне и введена в контейнер, если он оснащен @Component (конечно, должно быть строковое значение () по умолчанию »;»; метод, потому что бобы пружины уникальны с помощью Beanname).
Суммировать
Вышеуказанное дело о кратком обсуждении этой статьи о применении пользовательских аннотаций весной, я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!