, но может возникнуть проблема с заменой одного компонента другим в большой системе
Этого просто не следует делать.Управляемый компонент JSF должен быть специфичным для представлений JSF и не должен использоваться другими уровнями / API.Если вы хотите поделиться некоторыми данными между JSF и другими уровнями / API, которые не знают о JSF, вам лучше поместить эти данные в свой собственный класс и сделать его свойством управляемого компонента 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.Это также называется архитектурным шаблоном «Объект передачи данных».