2010-08-04 16 views
5

Ho appena introdotto Spring in un'applicazione Web JSF e ora mi sento tentato di trasformare i bean gestiti JSF in bean Spring spostando questi bean nel file contextConfigLocation XML (specificando org.springframework .web.jsf.el.SpringBeanFacesELResolver in faces-config.xml) invece di avere i bean nel file faces-config.xml.Spostamento di bean gestiti da JSF per Spring bean

Vedo molti vantaggi se mi sposto nei bean Spring (come ottenere la funzionalità di dipendenza delle dipendenze) rispetto ai bean JSF quindi difficilmente posso discutere contro il passaggio ai bean Spring, ma mi piacerebbe sapere dagli altri quali problemi potrei faccia se faccio questo, o qual è la migliore pratica per questo caso.

Grazie.

risposta

5

L'unico problema principale potrebbe essere il JSF a tenuta stagna con Spring e le vostre viste/modelli JSF potrebbero non essere più riutilizzabili senza Spring. L'unica alternativa praticabile sarebbe l'aggiornamento a JSF 2.0/Java EE 6 e fare uso di Java EE 6 fornito di funzioni di iniezione delle dipendenze invece di affidarsi a un framework DI di terze parti. D'altra parte, i vantaggi dello corrente sono validi. Puoi farlo solo

+0

Java EE 6 non è possibile in questo momento, sto ritrassi a Java EE 5. Penso che tr y per mantenere i miei bean di supporto JSF come bean gestiti JSF, per la logica aziendale e altri servizi Userò Spring ... Non ho controllato, ma forse potrebbe essere possibile dichiarare i bean in faces-config.xml ma creare una configurazione da qualche parte quindi questi fagioli sono effettivamente gestiti da Spring (forse sto dicendo qualcosa di stupido, sono relativamente nuovo a Spring e il modo in cui dichiaro che i miei bean stanno usando un file contextConfigLocation). –

+0

Se si desidera il completamento automatico in Eclipse per i bean Spring, vedere https://stackoverflow.com/questions/48933757/el-autocomplete-code-assist-with-eclipse-and-spring-beans – Thies

2

Non spostare i bean gestiti JSF in bean Spring. I cicli di vita di JSF e Spring bean (scope) non corrispondono completamente. Ad esempio, l'ambito di visibilità e l'ambito della conversazione mancano in Spring Framework.

Invece, mantenere i bean di supporto JSF come bean gestiti da JSF e autowire Spring beans su di essi.

Definire una superclasse astratta per i fagioli JSF backing in questo modo:

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); 
    } 
    ... 
} 

Quindi, rendere il vostro fagioli backing estendono che superclasse e sarete in grado di autowire bean Spring e hanno fare uso di JSF-specifica portata vista :

@ManagedBean 
@ViewScoped 
public class MyBackingBean extends AutowireableManagedBean { 

    @Autowired 
    private MyDao myDao; 

Ulteriori informazioni in questo articolo: http://www.beyondjava.net/blog/integrate-jsf-2-spring-3-nicely/

Problemi correlati