Spring se adapta a nuestros objetos permitiendo configuraciones especificas.
Instanciando con Static Factory Method
En algunos casos tenemos clases que tiene el constructor privado y usamos un metodo static para obtener la instancia de dicha
clase:
1
2
3
4
5
6
7
8
9
10
11
12
publicclassClientService{privatestaticClientServiceclientService=newClientService();//Constructor privadoprivateClientService(){}//Metodo static para instanciar la clasepublicstaticClientServicecreateInstance(){returnclientService;}}
Otro caso cuando tenemos un bean que instancia otros beans:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Bean para instanciar otros beanspublicclassDefaultServiceLocator{privatestaticClientServiceclientService=newClientServiceImpl();//Constructor privadoprivateDefaultServiceLocator(){}//Metodo de instancia para instanciarpublicClientServicecreateClientService(){returnclientService;}}
1
2
3
4
5
6
<beanid="serviceLocator"class="examples.DefaultServiceLocator"><!-- cualqueir dependencia requirida --></bean><!-- El bean a crear via factory bean --><beanid="clientService"factory-bean="serviceLocator"factory-method="createClientService"/>
Factory Method con Argumentos
Aqui podemos pasar argumentos al método factory:
1
2
3
4
5
6
7
8
9
10
publicclassExampleBean{privateExampleBean(...){//... }publicstaticExampleBeancreateInstance(BeanUnobeanUno,BeanDosbeanDos,inti){ExampleBeaneb=newExampleBean(...);// some other operations...returneb;}}
Algunas veces necesitamos que un bean se instancie después de otro aunque estos no sean dependencias directas. Por alguna razón
queremos un orden específico de inicialización. Aquí usamos el atributo depends-on.
Por defecto los bean se inician todos al levantar el contenedor. Es posible iniciar un bean solo cuando sea llamado. Aunque
si un bean lazy es necesitado por uno eager(que se crea al levantar el contendor), el bean lazy será pre-inicializado.