Я беру JSF 2.0 и сомневаюсь в новом автоматическом подключении на основе аннотаций (объявление управляемых bean-компонентов без кода в faces-config.xml).

Насколько я понимаю, аннотации великолепны и просты, но проблема может привести к определенной необходимости замены одного bean-компонента другим в большой системе, что, если бы были использованы аннотации, привело бы к необходимости удаления определенных классов (или подобного грязного взлома). ), а это легко исправить в faces-cofig.xml.

Пожалуйста, поделитесь своим опытом по этому поводу. Что считать удобнее и почему?

4
Denys S. 21 Фев 2011 в 21:07

2 ответа

Лучший ответ

Как было сказано в Core JavaServer Faces (третье издание):

До JSF 2.0 все bean-компоненты нужно было настраивать с помощью XML. В настоящее время у вас есть выбор между аннотациями и конфигурацией XML. Конфигурация XML довольно многословна, но она может быть полезна, если вы хотите настроить bean-компоненты во время развертывания.

Аннотации позволяют быстро разрабатывать и сокращать избыточное кодирование XML. Как правило, это очень сильно зависит от самого проекта.

2
Community 20 Июн 2020 в 12:12

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

Этого просто нельзя делать. Компонент, управляемый JSF, должен быть специфичным для представлений JSF и не должен повторно использоваться другими уровнями / API. Если вы хотите совместно использовать некоторые данные между JSF и другими уровнями / API, которые не знают о JSF, вам лучше поместить эти данные в отдельный класс и сделать их свойством управляемого bean-компонента JSF.

Итак, вместо

@ManagedBean
@SessionScoped
public class User {
    private Long id;
    private String username;
    private String password;
    // ...
}

Тебе лучше иметь

@ManagedBean
@SessionScoped
public class UserManager {
    private User user;
    // ...
}

А также

public class User {
    private Long id;
    private String username;
    private String password;
    // ...
}

Таким образом, вы можете просто поделиться User между всеми слоями, не беспокоясь о специфичных для слоя API. Это также известно как архитектурный паттерн «объект передачи данных».

3
BalusC 23 Фев 2011 в 15:30
Большое спасибо за ответы! Вы имеете в виду, что аннотации - это предпочтительный способ, или просто оба одинаково хороши даже для самых сложных сценариев? Мне нравятся аннотации, но я хочу по возможности избегать переключения
 – 
fr_andres
9 Ноя 2017 в 22:40
Я должен был быть более конкретным: под сложным я имел в виду сложный поток данных в самом приложении (за исключением настроек, специфичных для развертывания), настолько сложный, насколько это возможно без необходимости переопределения аннотаций с помощью xml
 – 
fr_andres
9 Ноя 2017 в 22:53
1
Используйте аннотации. Тем не менее, я хотел бы убедиться, что вы знаете, что аннотации javax.faces.bean.* устарели, начиная с JSF 2.3. См. Также stackoverflow.com/q/4347374
 – 
BalusC
9 Ноя 2017 в 22:55
Еще раз спасибо за ценный совет и внимание! да, учебник Oracle EE7 уже идет по пути CDI, но мне это надоедает. Кроме того, в 16.3 приводится еще одна причина для аннотации в контексте потоков лиц: они помещают код ближе к остальной части кода потока и позволяют модулировать потоки , что, как я полагаю, является большим профессионалом
 – 
fr_andres
10 Ноя 2017 в 02:43
1
Java EE 8 вышла всего два месяца назад: javaee.github.io/tutorial/toc.html
 – 
BalusC
10 Ноя 2017 в 11:20