injection example create beans bean java spring constructor javabeans private

java - example - spring injection constructor



Java Spring Bean con constructor privado (4)

¿Es posible en Spring que la clase para bean no tenga constructor público sino solo privado? ¿Se invocará este constructor privado cuando se cree bean? Gracias.


Normalmente tendrá un método de fábrica estático en dichos granos, puede especificar ese método para que la primavera obtenga una instancia de ese grano. Ver 3.3.1.3 aquí. Esta es la forma en que lo recomienda Spring, en lugar de ir contra las restricciones de visibilidad.


Sí, Spring puede invocar constructores privados. Si encuentra un constructor con los argumentos correctos, independientemente de la visibilidad, usará la reflexión para establecer que su constructor sea accesible.


Sí, los constructores privados son invocados antes de la primavera. Considera mi código:

Archivo de definición de frijol:

<bean id="message" class="com.aa.testp.Message"> <constructor-arg index="0" value="Hi Nice"/> </bean>

Clase de frijoles:

package com.aa.testp; public class Message { private String message; private Message(String msg) { // You may add your log or print statements to check execution or invocation message = msg; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public void display() { System.out.println(" Hi " + message); } }

El código anterior funciona bien. Por lo tanto, la primavera invocó al constructor privado.


Siempre puede usar un método de fábrica para crear beans en lugar de confiar en un constructor predeterminado, desde el contenedor IoC: instanciación usando un método de fábrica de instancias :

<!-- the factory bean, which contains a method called createInstance() --> <bean id="serviceLocator" class="com.foo.DefaultServiceLocator"> <!-- inject any dependencies required by this locator bean --> </bean> <!-- the bean to be created via the factory bean --> <bean id="exampleBean" factory-bean="serviceLocator" factory-method="createInstance"/>

Esto tiene la ventaja de que puede usar constructores no predeterminados para su bean, y las dependencias para el bean de fábrica también pueden ser inyectadas.