Весь смысл Java Beans состоит в том, что система (в частности GUI Builder) может исследовать Java Bean и настраивать его без каких-либо предварительных знаний об этом компоненте.
Хотя это довольно круто, на самом деле это полезно только в этой конкретной ситуации, и в наши дни аннотации будут работать НАМНОГО лучше.
Таким образом, причина, по которой они используют связанные свойства, заключалась в том, чтобы просто поддерживать эту технологию компонента графического интерфейса, и я бы не стал предпочитать ее по сравнению с событиями, если вам не требуется поддержка отражающей системы построения графического интерфейса.
Ответ на @Mike грызун
Допустим, вы разрешаете своему пользователю создавать класс, которым вы будете управлять. Этот класс имеет "Main" и может обрабатывать пару событий.
Обычно ваш пользователь делает что-то вроде этого:
class UserClass(someClass) {
void mainMethod() {
someClass.addEventListener(new EventListener() {
public void eventsHappen(Event e){
event1(e)
}
}
}
someClass.addDifferentEventListener(new DifferentEventListener() {
public void eventsHappen(DifferentEvent e){
event2(e)
}
}
}
}
public void event1(Event e) {
//java code for event 1
}
public void event2(DifferentEvent e) {
// java code for event 2
}
}
В любом случае, вы поняли идею. Конечно, вы предполагаете, что этот класс где-то зарегистрирован - возможно, в файле xml / config. Вы читаете его, создаете его экземпляр и выполняете mainMethod (определенный соглашением или интерфейсом), и он регистрируется сам и начинает получать вызовы обработчиков событий.
Теперь вот как вы можете выполнить то же самое с помощью аннотаций: (Вы можете распознать шаблон - это в значительной степени то, как Junit комментирует тесты.)
class UserClass() {
@Event1
void event1Method(Event e) {
event1's code
}
@Event2
void event2Method(AnotherEvent e) {
event2's code
}
}
Это гораздо более прямолинейно и удаляет большую часть шаблона, а также устраняет необходимость в соглашении или интерфейсе, аннотации более четко определены и независимы. (На самом деле вам даже НЕ НУЖНЫ аннотации событий, если вы хотите проверить параметры, передаваемые в методы, но драконы лежат в этом общем направлении).
Вам все еще нужен класс, зарегистрированный где-то, но на этот раз вы просто сканируете каждый метод на предмет аннотаций событий и регистрируете их самостоятельно. Поскольку для чтения и обработки такого класса требуется всего несколько строк кода, зачем ограничивать этот шаблон модульным тестированием?
Еще одна вещь, которая мне показалась очень интересной, я использовал этот шаблон для классов Groovy, которые были «подключены» к моей Java-программе. Так как я все равно компилировал все классы в данном каталоге, сканирование аннотаций было тривиальным. Эффект для пользователя заключается в том, что он вставляет (или редактирует) правильно аннотированный текстовый файл groovy, и мой код немедленно компилируется, интегрируется и начинает вызывать их обработчики событий.