I\'m getting my hands on JSF 2.0 and have certain doubt about new annotation based auto-wiring (declaration of managed beans without any code in faces-config.xml).
A
but problem may come to a certain need of substituting one bean with another in a big system
This should simply not be done. A JSF managed bean should be specific to JSF view(s) and not be reused by other layers/APIs. If you want to share some data between JSF and other layers/APIs which are not aware about JSF, then you should rather put that data in its own class and make it a property of a JSF managed bean.
So, instead of
@ManagedBean
@SessionScoped
public class User {
private Long id;
private String username;
private String password;
// ...
}
you should rather have
@ManagedBean
@SessionScoped
public class UserManager {
private User user;
// ...
}
and
public class User {
private Long id;
private String username;
private String password;
// ...
}
This way you can just share User
between all layers without worrying about layer-specific API's. This is also known as "Data Transfer Object" architectural pattern.