Аннотации в Java — Пользовательские аннотации

Java задняя часть Spring API

Аннотации в Java — Пользовательские аннотации

Всем привет, давно не обновлялся, увидел, что кто-то в последнем посте в блоге сказал, что надо поторопиться и обновить весеннюю серию блогов, чтобы не покупать книги. Я чувствую себя обязанным сказать всем здесь,Не имейте привычку читать только блоги, а не читать книгиМногие думают, что блоги появляются быстро, быстро учатся и уделяют пристальное внимание ключевым моментам. Я признаю, просмотр блогов — это быстрый способ начать работу, конечно, выбранный вами блог,Автору, честно говоря, стыдно, да и меха он знает совсем немного, а люди многое подбирают. Многое также находится в стадии изучения. А у автора много знаний и может быть не все так, просто для справки.На самом деле, я действительно хочу изучить ряд вещей досконально, автор все ещеОчень рекомендую прочитатьДа, посмотрите на некоторые книги, написанные Taobao и Jingdong, хотя они появляются медленно, они очень полны и систематичны.Если мы относимся к ведению блога как к еде, то чтение, несомненно, является нашим основным продуктом питания., Любой, у кого есть хоть немного здравого смысла, знает, что употребление в пищу риса или макарон в качестве основного продукта питания является наиболее питательным для организма. Что ж, после стольких разговоров в этой статье я расскажу о пользовательских аннотациях в Java, потому что многие из моих друзей, кажется, понятия не имеют, что такое аннотации. Они знают только, как их использовать. Я действительно не знаю. Принцип аннотаций. Эта статья поделится с вами структурой статьи:

  1. Обзор аннотаций в Java
  2. Четыре мета-аннотации
  3. пользовательская аннотация

1. Обзор аннотаций в Java

Прежде всего, нам нужно пояснить одну вещь: аннотация определенно не предоставляется Spring, а привнесена JDK, в самой JDK также есть много встроенных аннотаций, таких как @override, функция аннотации на самом делеПридайте особое значение некоторым аннотированным классам, методам и т. д., как создать собственное значение на самом делеПроцессор аннотацийЧто ж, это следующая статья, о которой я вам расскажу.

2. Четыре вида метааннотаций

Мета-аннотации, если говорить прямо, — это аннотации, поставляемые с JDK, для чего нужны эти аннотации? Фактически, когда мы настраиваем аннотации, мы аннотируем наши настроенные аннотации, например:

@Target(ElementType.TYPE)
public @interface Table {
    public String tableName() default "className";
}

Не беспокойтесь о синтаксисе, таблица на самом деле является пользовательской аннотацией, которая у меня есть, и ее можно использовать как @Table, тогда эта @Target на самом деле является мета-аннотацией. Мета-аннотации, поставляемые с JDK, следующие:

  1. @Target
  2. @Retention
  3. @Documented
  4. @Inherited
@Target

Используется для описания области применения аннотации., есть перечислениеElementTypeуказать следующим образом:

  1. CONSTRUCTOR: используется для описания конструктора
  2. FIELD: используется для описания поля
  3. LOCAL_VARIABLE: используется для описания локальных переменных.
  4. МЕТОД: используется для описания метода
  5. ПАКЕТ: используется для описания пакета
  6. ПАРАМЕТР: используется для описания параметров
  7. ТИП: используется для описания классов, интерфейсов (включая типы аннотаций) или объявлений перечисления.

eg:

@Target(ElementType.METHOD)
public @interface Dog {
    
}

Как видите, аннотацию my Dog можно использовать только в методе.

2. @Retention

Указывает, на каком уровне необходимо сохранить информацию аннотации, чтобы описать жизненный цикл аннотации., который также является перечислениемRetentionPoicyДля решения я не буду перечислять это перечисление, в том числе и как определить жизненный цикл аннотации, много говорить не буду, так как по опыту моего брата за столько лет заполняетсяRetentionPoicy.RUNTIME, Заполните это значение, и процессор аннотаций сможет получить информацию аннотаций, инвертируя цвет и реализуя свою собственную семантику, поэтому каждый может заполнить RetentionPoicy.RUNTIME. Если вы хотите расширить свое понимание, вы можете сами погуглить.

3. @Documented

Если вы хотите создавать документы с аннотациями при использовании javadoc для создания документов, принесите это. (Говоря о том, как старые утюги пишут документы, младший брат сказал, что он никогда не пишет документы... ^_^)

4. @Inherited

Мета-аннотация @Inherited является маркерной аннотацией, @Inherited указывает, что аннотированный тип наследуется. Если в классе используется тип аннотации @Inherited, аннотация будет использоваться в подклассах этого класса. Обратите внимание, что тип аннотации @Inherited наследуется подклассами аннотированного класса. Класс не наследует аннотации от интерфейсов, которые он реализует, а методы не наследуют аннотации от методов, которые он переопределяет.

На самом деле полезна только одна из этих аннотаций, то есть @Target, просто все обращают на нее немного внимания.Комментарии не добавляются там, где вы хотите.

3. Пользовательские аннотации

Мета-аннотации упоминались выше, давайте поговорим о том, как настроить аннотации, кстати, настраиваемые аннотации также называются комбинированными аннотациями, а затем поговорим о пользовательском формате аннотаций:

  1. Фиксированный формат, не беспокойтесь.
  2. Может быть изменено только с общедоступными правами доступа или правами доступа по умолчанию (по умолчанию. Например, String value(); Здесь метод установлен на тип по умолчанию по умолчанию;
  3. Определяет тип параметра аннотации, который может быть только:
  • Все основные типы данных (int, float, boolean, byte, double, char, long, short)
  • Тип строки
  • Тип класса
  • тип перечисления
  • Тип аннотации
  • Массивы всех вышеперечисленных типов
  1. имя метода, которое является этимПоддерживаемые имена свойств для аннотаций, как обычное значение.
  2. Указывает значение имени атрибута по умолчанию, если оно не указано, и является необязательным.

Ну, приведу пример:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Dog {
    public String dog() default "";
}

Я определил аннотацию Dog, у которой есть атрибут dog, который имеет тип String, и значением по умолчанию является "". Я могу использовать его так, когда я его использую, @Dog(dog="Xiaohuang"), и его также можно использовать напрямую, как этот @Dog, не указывайте атрибут собаки, по умолчанию "" .

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

  1. Пользовательский процессор аннотаций специально реализует семантику для ваших пользовательских аннотаций (например, методы, аннотированные с помощью @Dog, при вызове все выводят информацию о вызове в лог-систему), в следующем блоге будет рассказано о пользовательских процессорах аннотаций.
  2. Используйте с Весной.

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

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Dog {
    public String dog() default "";
}

Я только что добавил @Component в аннотацию @Dog, тогда эта аннотация будет иметь функцию @Component (добавленную Spring в контейнер Spring как bean-компонент).Разница между модификатором свойства public и default

  • Публично измененные свойства могут быть переопределены, а свойства по умолчанию — нет. Например:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
@Dog
public @interface StupidDog {
    public String dog() default "我是一条StupidDog";
}

Теперь я определяю аннотацию StupidDog, эта аннотация переопределяет атрибут собаки @Dog и изменяет значение по умолчанию с «» на «Я StupidDog».

Что ж, возвращаясь к теме, я знаю, что комбинированная аннотация может иметь функцию аннотированной аннотации, и давайте возьмем аннотацию @Dog, которая только что была аннотирована @Component, Когда класс аннотирован этой аннотацией, например:

@Dog
public class TestService {
    ...
}

Мы знаем, что этот TestService будет добавлен в контейнер Spring как Bean в среде Spring, но какой от этого прок? Это прекрасно работает! Это можно использовать для различения bean-компонентов в контейнере Spring, например следующий фрагмент кода:

// ctx 为Spring的ApplicationContext
// // 获取所有带有 Dog 注解的 Spring Bean
Map<String, Object> serviceBeanMap = ctx.getBeansWithAnnotation(Dog.class); 

Как вы видете,Вы можете получить несколько компонентов Spring со специальными тегами (настраиваемые аннотации) через ApplicationContext!Не стоит недооценивать эту функцию.Если вы хотите выполнить некоторые специальные операции с определенным типом Spring Bean после инициализации контейнера Spring. Пользовательские аннотации могут помочь вам выделиться.

Эпилог

Что ж, с вами поделились некоторыми знаниями о пользовательских аннотациях. На самом деле, это относительно просто, а синтаксис очень понятен. Затем я упомянул об использовании комбинированных аннотаций для использования с Spring @Componenet. На данный момент вы будете обнаружил, что Аннотации, определенные вами, кроме того, что их можно использовать в сочетании со Spring, бесполезны. Они также упомянуты выше. Пока что да, я поделюсь ими с вами в следующей статье.обработка пользовательских аннотаций, эта вещь позволяет нашим пользовательским аннотациям реализовывать свои собственные уникальные функции. В эту пятницу всем хороших выходных, выходите и играйте больше. Работайте меньше сверхурочно, заботьтесь о своем теле и делайте это. Не соглашайтесь со своими потребностями. Выкладывайтесь как можно больше.Over,Have a good day .