Ho appena iniziato con il concetto Spring IOC. Spesso vedo la maggior parte degli esempi trovati in internet che usano il codice per ottenere l'oggetto.Come evitare l'uso di ApplicationContext.getBean() quando si implementa Spring IOC
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Hello hello = (Hello) appContext.getBean("hello");
Come riferimento da queste domande 1 e 2 in StackOverflow. Ho dedotto che non è necessario utilizzare appContext.getBean ("ciao") nel codice che è considerato una cattiva pratica. Inoltre, non consigliato più. Correggimi qui, se la mia inferenza è sbagliata.
Tenendo presente che ho apportato modifiche al mio progetto di conseguenza. Ecco la mia applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<bean id="utilClassRef" class="org.hd.derbyops.DUtils" lazy-init="false" />
<bean id="appContext" class="org.hd.derbyops.ContextProvider" lazy-init="false">
<property name="utils" ref="utilClassRef" />
</bean>
</beans>
mio contextProvider Codice Classe
public class ContextProvider implements ApplicationContextAware {
private static ApplicationContext ctx;
/**
* Objects as properties
*/
private static DUtils utils;
public void setApplicationContext(ApplicationContext appContext)
throws BeansException {
ctx = appContext;
}
public static ApplicationContext getApplicationContext() {
return ctx;
}
public static DUtils getUtils() {
return utils;
}
public void setUtils(DUtils dUtilsRef) {
utils = dUtilsRef;
}
}
Per esempio, si consideri una classe A che dipende org.hd.derbyops.DUtils. Sto utilizzando la seguente riga di codice
ContextProvider.getUtils();
inorder per ottenere DUtils oggetto in classe A, evitando così l'utilizzo di ApplicationContext.getBean()
ovunque nel mio codice.
Supponiamo, se ho 10 classi e la mia classe A dipende da tutti loro, i cui oggetti da creare e accedere senza utilizzare ApplicationContext.getBean()
. Anche in questo caso, come sopra, ho pensato di creare proprietà della classe ContextProvider seguita da setter e getter di quella proprietà, dove in get<PropertyName>
è statico. In questo modo, posso usarlo ovunque mi occorra un oggetto, come questo
ContextProvider.get<PropertyName>;
Ecco la mia breve domanda. In primo luogo, il mio approccio è giusto? Se è giusto, caricando tutti i fagioli all'avvio, non sarebbe un killer delle prestazioni? Come lo faresti nelle tue applicazioni senza chiamare getBean almeno più di una volta?
Se si dovesse progettare un'applicazione Web &, si doveva implementare il CIO di primavera, senza utilizzare ApplicationContext.getBean()
in alcun codice. Come lo faresti?
Nota: con riferimento alle altre domande tagged sopra
Calling ApplicationContext.getBean() non è Inversion of Control!
Si sta utilizzando Spring MVC o cercando di usare servlet di base? –
Non sto usando Spring MVC, lo sto usando solo per IOC – srk
In generale, * qualcuno * avrà bisogno di ottenere un bean da 'ApplicationContext'. Idealmente, verrà chiamato una sola volta, e sarebbe dall'oggetto bootstrap ... –