A interface InitializingBean fornece uma maneira de inicializar métodos para feijões. Ele inclui apenas o método AfterPropertiEsset. Qualquer classe que herda a interface executará o método ao inicializar o feijão.
Testado da seguinte maneira:
importar org.springframework.beans.factory.initializandoBean; public classe testinitializingbean implementos InitializandoBean {@Override public void depoisPropertiEsset () lança exceção {System.out.println ("Ceshi InitialingBean"); } public void testinit () {System.out.println ("Ceshi init-method"); }}Arquivo de configuração
<bean id = "testinitializingbean"> </shean>
A principal função é a seguinte
classe pública principal {public static void main (string [] args) {ApplicationContext context = new FileSystemxMLApplicationContext ("/src/main/java/com/beans.xml"); }}Os resultados dos testes são:
Ceshi InitializingBean
Isso significa que, quando a primavera inicializa o feijão, se o feijão implementar a interface InitializingBean, o método AfterPropertiesset será chamado automaticamente.
Portanto, o problema é que, ao configurar o feijão, você também pode configurar o método de inicialização para o feijão usando a configuração init-method. Qual desses dois será executado primeiro? Em seguida, teste, modifique o arquivo de configuração e adicione o init-method:
<bean id = "testinitializeBean" init-method = "testinit"> </shean>
Execute o programa e obtenha o resultado:
Ceshi InitializingBean
Ceshi init-method
A partir dos resultados, podemos ver que, quando a primavera inicializa o feijão, se o feijão implementar a interface InitializingBean e especificar o método init-mestrado no arquivo de configuração, o sistema chama primeiro o método AfterPropertieSet () e depois chama o método especificado no init-method.
Então, como esse método é implementado na primavera? Observando a classe de código -fonte de feijão de carregamento de mola, você pode ver o mistério. Os modelos de InvokeInitMethods na classe abstrumaUtowiredCapableBeanFactory são muito claros, como segue:
Void protegido InvokeInitMethods (String Beanname, Final Object Bean, ROOTBEAndEfinition MBD) lança arremesso {// julga se o feijão implementou a interface InitializingBean. Se a interface InitializingBean for implementada, apenas o método AfterPropertiEsset do feijão será chamado booleano isinitializandoBean = (instância do feijão de inicialização dobean); if (isinitializingBean && (mbd == null ||! mbd.isexternallyManagedInitMethod ("AfterPropertiesset"))) {if (Logger.isdebugEnabled ()) {Logger.debug ("InvoceNeaneeNeeNeeMenet); } if (System.getSecurityManager ()! = null) {try {AccessController.Doprivileged (new PrivilegedExceptionAction <ject> () {public Object run () lança exceção {// chama diretamente oppropertiesset ((inicializandoBean) bean) .AstroProTerSeSt (); } catch (privilegedActionException pae) {tiro pae.getexception (); }} else {// Chame diretamente depois doPROPERTIESSET ((InitializingBean) Bean) .AFterPropertiESSET (); }}} if (mbd! = null) {string initMethodName = mbd.getinitMethodName (); // distingue se o método Init-Method é especificado. Se o método init-method for especificado, então o Init-method estabelecido se (initMethodName! = Null &&! (IsinitializandoBean && "AfterPropertiesset" .equals (initMethodName) &&! MBD.IsexternallyMagedInitMethod (initmethName)) {! O método init-method é implementar o InvoKecustominitMethod (Beanname, Bean, MBD); }}}Resumir:
1. O Spring fornece ao feijão duas maneiras de inicializar os feijões, implementar a interface InitializingBean, implementar o método AfterPropertiEsset ou especificá-lo através do Init-Method no arquivo de configuração. Ambos os métodos podem ser usados ao mesmo tempo.
2. A implementação da interface InitializingBean chama diretamente o método AfterPropertiEsset, que é um pouco mais eficiente do que chamar o método especificado pelo Init-Method através da reflexão, mas o método init-method elimina a dependência da mola.
3. Se ocorrer um erro ao chamar o método AfterPropertiEsset, o método especificado pelo Init-Method não é chamado.
O papel da primavera inicializandoBean
A interface inicializadora da primavera é muito útil. Está localizado em feijão de primavera. Ele fornece apenas um método após oPROPERTIESSET (). Quando você implementa esse método, a Spring fornecerá suporte ao nível da estrutura: quando você produz uma instância da classe que implementa a interface através do contêiner SRing, ele chama o método AfterPropertiesset. Através deste método, você pode verificar se o seu feijão é inicializado corretamente. Obviamente, você também pode usar o método init-method. Esses dois métodos podem ser usados ao mesmo tempo, e a ordem das chamadas é init-method.
Resumir
O exposto acima é o uso da interface InitializingBean na primavera introduzida pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!