El punto Alex está tratando de hacer es que estás confundiendo clases con instancias. Este es un error OOP clásico (juego de palabras).
La anotación @ManagedBean no funciona en las clases per-se. Funciona en instancias de dichas clases, definiendo una instancia que se administra.
Si el bean se define así:
@ManagedBean
@SessionScoped
public class MyBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
}
entonces significa que usted tiene un instancia de sesión con ámbito de, llamado myBean (o como se quiera llamarlo).
Por lo tanto, todas las clases que son subclases de la clase de MyBean no se administran de manera predeterminada. Además, ¿cómo reconoce JSF dónde está usando las subclases? Si es así, ¿qué nombres le estás dando a esas instancias? (Porque hay que darles un nombre, de lo contrario, ¿cómo JSF gestionarlos?)
tanto, vamos a decir que tiene otra clase:
Class MyOtherClass {
private MyBean myBeanObject; // myBeanObject isn't managed.
}
lo que ocurre con la @PostConstruct y todas las demás anotaciones ¿usaste? Nada. Si creó la instancia de MyBean, entonces es USTED quien lo administra, no JavaServerFaces. Por lo tanto, no es realmente un frijol administrado, solo un objeto común que usas.
Sin embargo, las cosas cambian por completo cuando se hace esto:
@ManagedBean
@SessionScoped
Class MyOtherClassBean {
@ManagedProperty("#{myBean}")
private MyBean myBeanObject;
public void setMyBeanObject(...) { ... }
public MyBeanClass getMyBeanObject() { ... }
}
Por otra parte, lo que se logró no es la clase, pero el ejemplo de la clase. Tener un ManagedBean significa que solo tienes una instancia de ese bean (por alcance, eso es).
Al hacer esto, tendré que poner @ManagedBean en todos mis granos ... ¡esto es lo que quiero evitar! – Stephan
@Stephan: ¿Por qué evitas poner anotaciones en todos tus beans administrados? No sé lo que pones dentro de tu 'BaseBean', pero por la forma en que lo mencionas, debe ser común entre todos los beans administrados, por lo que no debes anotarlo @ManagedBean ya que no es realmente un controlador/puerta de enlace a tu 'Modelo'. Tiene su 'BaseBean' para ser' SessionScoped', por lo que cada bean heredado de 'BaseBean' será SessionScoped, lo quiera o no. No quieres guardar demasiadas cosas en Session. ¿Qué sucede si desea crear un bean administrado que tiene RequestScoped y heredar 'BaseBean'? –
Para ser más claro: ¿es posible heredar @ManagedBean? – Stephan