2014-02-07 6 views
3

От Oracle:являются аннотациями своего рода АОП?

аннотаций, в виде метаданных, предоставляют данные о программе, которая не является частью самой программы. Аннотации не оказывают прямого влияния на работу кода, который они комментируют.

и от wikipedia:

в области вычислительной техники, аспект-ориентированное программирование (АОП) является парадигмой программирования, которая направлена ​​на повышение модульности, позволяя разделение сквозных проблем. АОП является основой для разработки аспектно-ориентированного программного обеспечения.

Мой вопрос: если я использую аннотацию как @EJB, могу ли я сказать, что использую АОП? Потому что кажется, что @EJB - это сквозная забота обо мне (например, поиск ресурсов). Пожалуйста, объясните, да или нет, или иногда аннотация является АОП.

+0

EJB управляет инъекцией зависимости, АОП - это другая вещь. В любом случае аннотации могут быть использованы в рамках AOP. – holap

ответ

4

Аннотации сами по себе не являются АОП, они просто украшают класс, свойство или метод метаданными. В терминах АОП вы можете сказать, что аннотации описывают «Аспекты», но сами по себе они не предоставляют никаких дополнительных функций.

АОП обычно требует информации, чтобы определить, куда вводить или обеспечивать перехват. В некоторых библиотеках AOP используется XML, чтобы описать места программы, в которых можно сплести их функциональность, другие используют аннотации для этой же цели.

Итак, аннотации не являются АОП, а скорее способом маркировки местоположений в коде, в котором АОП может вмешиваться и добавлять сквозные проблемы.

0

Aspect Oriented Программирование его конкретной техники (я не верю, что AOP можно рассматривать как парадигму), вы создаете «Аспекты», а аспект инкапсулирует выполнение какого-либо поведения и мест (точечные сокращения в терминологии АОП) где это поведение выполняется.

Вы можете просмотреть аннотации, как механизм определения «точечных сокращений», и вам нужна другая вещь, например, среда выполнения (например, сервер приложений) или, возможно, программа времени компиляции (подумайте в аннотации для создания некоторой формы документации) для выполнения поведения, связанного с этой аннотацией.

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

1

Весь cross cutting concern mumbo jumbo Я нахожу очень запутанным с АОП. Суть в том, что с AOP во время компиляции что-то вставляет код в ваш код, создавая новый байт-код. Итак, представьте, у вас есть один аспект, который (peudocode)

class Aspect{ 
    public void OnMethodBoundaryStart(some stuff){ 
     System.out.println("Hey the method is starting!") 
    } 
} 

class AspectUser{ 
    @OnMethodBoundaryStart 
    public void SomeMethod(){ 
     System.out.println("Something"); 
    } 
} 

Тогда OnMethodBoundaryStart код на самом деле буквально вставляется в байт-код, аннотацию только украшает метод так, что инфраструктура, которая делает вставку байткодом знает, что делать.

Таким образом, аннотации не являются АОП, а АОП - не обязательно аннотациями. Вы, вероятно, можете сделать AOP, как хотите, если вы напишете свою собственную структуру AOP. Все AOP означает, что он отделяется от того, где вы пишете свой код и как его объединяете.У вас могут быть аспекты, которые делают вещи на операторах возврата, или во время исключения или в конце метода. Вы также можете использовать аспекты для реализации скрытых интерфейсов, классов или всех видов материалов.

+1

Усовершенствование байткода - это только один из разновидностей АОП. Spring Proxy AOP работает точно, проверяя аннотации и вставляя прокладки во время выполнения. – chrylis

+0

@chrylis аккуратный, не знал этого. благодаря! – devshorts

Смежные вопросы