2010-08-04 21 views
5

Acabo de presentar Spring en una aplicación web JSF, y ahora me siento tentado de convertir mis beans administrados JSF en Spring beans moviendo estos beans al archivo XML contextConfigLocation (especificando org.springframework .web.jsf.el.SpringBeanFacesELResolver en faces-config.xml) en lugar de tener los beans en el archivo faces-config.xml.Mover frijoles administrados JSF a Spring beans

Veo muchas ventajas si cambio a Spring beans (como obtener la funcionalidad de inyección de dependencia) en comparación con las judías JSF, así que difícilmente puedo argumentar en contra de pasar a Spring beans, pero me gustaría saber de otras personas. enfrentar si hago esto, o cuál es la mejor práctica para este caso.

Gracias.

Respuesta

5

El único problema importante puede ser que usted está conectando estrechamente JSF con Spring y que sus vistas/modelos JSF pueden no ser reutilizables sin Spring. La única alternativa factible sería actualizarse a JSF 2.0/Java EE 6 y utilizar las instalaciones de inyección de dependencias proporcionadas por Java EE 6 en lugar de confiar en un marco DI de terceros. Por otro lado, las ventajas actuales son buenas. Puedes simplemente hacerlo.

+0

Java EE 6 no es posible en este momento, yo estoy limitado a Java EE 5. Creo que voy a tr y para mantener mis beans de respaldo de JSF como beans administrados por JSF, para la lógica de negocios y otros servicios usaré Spring ... No he verificado, pero tal vez sea posible declarar los beans en faces-config.xml pero realice una configuración en algún lugar, Spring realmente maneja estos frijoles (tal vez estoy diciendo algo tonto, soy relativamente nuevo en Spring y la forma en que estoy declarando que mis beans está usando un archivo contextConfigLocation). –

+0

Si desea completar automáticamente en Eclipse para Spring beans, consulte https://stackoverflow.com/questions/48933757/el-autocomplete-code-assist-with-eclipse-and-spring-beans – Thies

2

No mueva los beans gestionados de JSF a Spring beans. Los ciclos de vida JSF y Spring beans (alcances) no coinciden por completo. Por ejemplo, el ámbito de vista y el alcance de conversación faltan en Spring Framework.

En su lugar, mantenga los beans de respaldo de JSF como beans administrados por JSF y conecte manualmente los beans de Spring.

Definir una superclase abstracta para beans de respaldo JSF como esto:

public abstract class AutowireableManagedBean { 

    protected AutowireCapableBeanFactory ctx; 

    @PostConstruct 
    protected void init() { 
     logger.debug("init"); 
     ctx = WebApplicationContextUtils 
       .getWebApplicationContext(
         (ServletContext) FacesContext.getCurrentInstance() 
           .getExternalContext().getContext()) 
       .getAutowireCapableBeanFactory(); 
     // The following line does the magic 
     ctx.autowireBean(this); 
    } 
    ... 
} 

Luego, haga que sus beans de respaldo se extienden que superclase y usted será capaz de Autowire granos de primavera y tienen hacer uso de alcance vista JSF-específica :

@ManagedBean 
@ViewScoped 
public class MyBackingBean extends AutowireableManagedBean { 

    @Autowired 
    private MyDao myDao; 

Más información en este artículo: http://www.beyondjava.net/blog/integrate-jsf-2-spring-3-nicely/

Cuestiones relacionadas