2016-04-26 3 views
1

Я видел аннотацию в весеннем каркасе. И мне интересно, как я могу сделать аннотацию.Как сделать аннотацию весной?

Мы использовали много аннотаций (например, @Controller, @Autowired, @RequestMapping и т. Д.). Используя такую ​​аннотацию, мы НЕ кодируем с отражением. Но я не могу найти учебник для создания аннотации без размышлений. Во всех учебниках писатели демонстрируют аннотацию с отражением.

Если я не использую отражение, НЕ МОЖЕТ БЫТЬ аннотация?

+1

Вопрос - это аннотация, чтобы сделать что? (ваш вопрос может быть проблемой X/Y) –

+0

@RC. Благодарю вас за ваше отношение. Когда я использую аннотацию весны, мне не нужно использовать рефлексию. Но когда я использую аннотацию клиента, я должен использовать отражение. В чем разница? –

+2

@blank_popup Поскольку аннотации были сделаны разработчиками Spring, они также сделали код, который обрабатывает аннотацию (путем отражения или перекодирования байт-кода). Например, аннотация '@ Transactional' обрабатывается' org.springframework.transaction.interceptor.TransactionInterceptor'. – Kayaman

ответ

2

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

+0

Аннотация может иметь логику. –

+0

@PeterRader Ухаживать за этим? Покажите мне аннотацию, сделанную на заказ, которая сделает что-то, не используя другое использование кода, чтобы проверить, существует ли аннотация. – Kayaman

+0

Извините, нет кода, я отвечаю в поезде, используя удобный. Ну, вы можете подклассифицировать enum и создать конструктор для значения, используемого как значение по умолчанию. В конструкторе вы пишете 'System.out.println (« меня существует »)' –

0

Вы можете написать Аннотации от JDK5 и лучше. Но только отражение (xand static-scope) может читать аннотации!

Аннотации были альтернативой xdoclet-тегам, они были частью Javadoc, поэтому ваш вопрос подобен «могу ли я написать документацию» - ну да.

Существует шутка о Памяти, которую можно записать, но не читать, WOM(write-only-memory).

Если вы не любите использовать Reflection, сторонняя библиотека может читать Аннотации через отражение для вас.

Что вы можете сделать, это аннотировать ваши аннотации.

Пример:

@Autowired(required=false) 
private MyService service; 

Может укоротить с помощью аннотаций, как это:

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
@Autowired(required=false) 
public @interface MyOptional { 
} 

Теперь вы можете изменить код

@MyOptional 
private MyService service; 

Вы видите, вы можете использовать пользовательские аннотации без кода отражения.

+0

Благодарим вас за ваш заказ. Из-за тебя я многое узнал! –