Jak volat metodu po inicializaci bean je hotová?

hlasů
205

Mám použití případ, kdy musím zavolat (non-statickou) metodu v bean jde jen jednou na naložit ApplicationContext. Je to v pořádku, pokud mohu použít MethodInvokingFactoryBean na to? Nebo máme nějaké lepší řešení?

Jako vedlejší poznámku, já používám ConfigContextLoaderListener načíst kontextu aplikace na webové aplikace. A chtějí, že je-li instance bean ‚A‘ stačí zavolat Methoda () jednou.

Jak je to možné udělat hezky?

Položena 06/07/2009 v 19:31
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
274

Expandovat na @PostConstruct návrhu v dalších odpovědích, to opravdu je nejlepším řešením, podle mého názoru.

  • Udržuje váš kód oddělenou od jara API (@PostConstruct je v javax. *)
  • Výslovně anotaci svou metodu init, jako něco, co je třeba nazývá inicializovat fazole
  • Nemusíte mít na paměti, přidejte atribut init metoda k vaší definici jarní fazole, jaro bude automaticky volání metody (za předpokladu, že se zaregistrujete na anotace-config možnost někde jinde v kontextu, stejně).
Odpovězeno 14/08/2009 v 09:57
zdroj uživatelem

hlasů
187

Můžete použít něco jako:

<beans>
    <bean id="myBean" class="..." init-method="init"/>
</beans>

To bude volat „init“ metoda, kdy je bean instance.

Odpovězeno 06/07/2009 v 19:37
zdroj uživatelem

hlasů
88

Existují tři různé přístupy, aby zvážila, jak je popsáno v odkazu

Použijte atribut init metoda

Klady:

  • Nevyžaduje fazole implementovat rozhraní.

Nevýhody:

  • Žádné bezprostřední indikace po dokončení stavby je zapotřebí tato metoda k zajištění fazole je správně nakonfigurován.

implementovat InitializingBean

Klady:

  • Není třeba specifikovat init metoda, nebo zapnout komponenty zpracování skenování / anotace.
  • Vhodné pro fazole dodávaných s knihovnou, kde nechceme aplikaci pomocí této knihovny zabývat se s bean životního cyklu.

Nevýhody:

  • Více invazivní než přístupu init-metoda.

Použijte JSR-250 @PostConstruct lifecyle anotaci

Klady:

  • Užitečné při použití skenování komponentního autodetekce fazole.
  • Je zřejmé, že konkrétní metoda se používá pro inicializaci. Záměrem je blíže ke kódu.

Nevýhody:

  • Inicializace již centrálně uvedeno v konfiguraci.
  • Je třeba pamatovat na zapnutí zpracování anotací (což může být někdy zapomněli)
Odpovězeno 07/07/2009 v 00:38
zdroj uživatelem

hlasů
36

Zkusili jste se provádí InitializingBean? Vypadá to, že přesně to, co hledáte.

Nevýhodou je, že vaše bean stane Spring vědomi, ale ve většině aplikací, že to není tak špatné.

Odpovězeno 06/07/2009 v 19:35
zdroj uživatelem

hlasů
8

Dalo by se nasadit vlastní BeanPostProcessor v aplikačním kontextu, jak to udělat. Nebo pokud vám nevadí, že implementace rozhraní jarní ve svém fazole, můžete použít InitializingBean rozhraní nebo „init metoda“ směrnici (stejný odkaz).

Odpovězeno 06/07/2009 v 19:35
zdroj uživatelem

hlasů
-7

Pro další vymazat jakékoli nejasnosti o dva přibližovací tj využívání

  1. @PostConstruct a
  2. init-method="init"

Z osobní zkušenosti jsem zjistil, že pomocí (1) funguje pouze v servlet kontejneru, while (2) pracuje v jakémkoli prostředí, a to i v desktopových aplikací. Takže, pokud by se používat jaro v samostatnou aplikaci, měli byste používat (2) provádět, že „tuto metodu volat po inicializaci.

Odpovězeno 26/05/2011 v 08:14
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more