¿Es posible en Spring que la clase para bean no tenga constructor público sino solo private? ¿Se invocará este constructor privado cuando se cree bean? Gracias.Java Spring Bean con constructor privado
Respuesta
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.
¿Podría darme la referencia a los documentos? Constructor tiene parámetros, y en el archivo xml a estos argumentos valores asignados. – user710818
quieres decir si un bean tiene algo específico como bean privado() {...} spring puede invocar eso? Cómo es eso posible, que desafía el propósito de "privado". –
Lo siento, probablemente estoy equivocado sobre esto solo siendo constructores no-arg. Estoy siguiendo lo que noté en mis propios proyectos. No puedo decir que lo haya visto alguna vez en la documentación de Spring. Pero este es el javadoc para la clase que es responsable de hacer la instanciación.http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/BeanUtils.html#instantiateClass(java.lang.reflect.Constructor,%20java.lang.Object .. .) –
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. Consulte 3.3.1.3 here. Esta es la forma en que lo recomienda Spring, en lugar de ir contra las restricciones de visibilidad.
extraño, no hay un método estático, no hay un constructor público pero cuando lo hago, se invoca el constructor privado. por sun.reflect.NativeConstructorAccessorImpl – user710818
¡Sin detalles/código no será posible seguir comentando! –
Supongo que estás equivocado. No hay un código específico: veo en el depurador solo los métodos estándar de sol/primavera. – user710818
Siempre se puede usar un método de fábrica para crear los granos en lugar de depender de un constructor por defecto, desde The IoC container: Instantiation using an instance factory method:
<!-- 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 se puede utilizar constructores no predeterminados para su frijol, y el también se pueden inyectar dependencias para el método de fábrica bean.
interesante, pero no puedo encontrar la fábrica. ¿Puede existir otra forma? – user710818
@Matthew: Parece que está adaptando Spring en torno a un código de terceros fugitivos. Eso es solo que está desordenado. –
@Donal, no, no entendí lo que dijo en el comentario. –
Sí, los constructores privados se invocan antes de la primavera. Considere mi código:
grano de archivo de definición:
<bean id="message" class="com.aa.testp.Message">
<constructor-arg index="0" value="Hi Nice"/>
</bean>
clase Bean:
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 correctamente. Por lo tanto, la primavera invocó al constructor privado.
- 1. Cómo XML configura Spring Bean para inyección de constructor cuando bean tiene varargs constructor
- 2. Spring HttpRemoting client como Java Configuration Bean
- 3. constructor privado
- 4. Java: acceso al constructor privado con parámetros de tipo
- 5. constructor privado y final
- 6. Spring ApplicationContext Bean Scope
- 7. En Java, ¿cómo hago una clase con un constructor privado cuya superclase también tiene un constructor privado?
- 8. Crear prototipo de Spring Bean con anotaciones?
- 9. ¿Cómo manualo manualmente un bean con Spring?
- 10. Instanciando clase interna con constructor privado
- 11. hibernate-envers RevisionListener spring integration as spring bean
- 12. ¿El atributo Spring @Transactional funciona en un método privado?
- 13. Constructor privado en la clase abstracta
- 14. Cómo crear un Spring Bean a partir de un constructor de clase interna estática?
- 15. Spring Bean ejecutándose en su propio hilo
- 16. Autocableando una colección a través del constructor con Spring
- 17. Spring: Configurando Bean con un setter de dos argumentos
- 18. Spring Security-Error creando bean 'org.springframework.security.filterChains'
- 19. ¿Es posible desprogramar un Spring Bean?
- 20. se extiende de la clase con constructor privado
- 21. ¿Puedo usar boost :: make_shared con un constructor privado?
- 22. basado en anotación Spring bean validation
- 23. cuando se carga spring bean y si tengo un constructor y setters, ¿cuál se llamará primero?
- 24. ¿Se puede usar Jackson con Spring MVC 3.0 para vincular también RequestBody a Java Bean?
- 25. Orden de Inicialización de Spring Bean
- 26. Logging Spring Bean creación/inyección de dependencia
- 27. ¿Por qué necesitamos un constructor privado?
- 28. Spring MVC no se encuentra un constructor predeterminado?
- 29. ¿Cómo actualizo el valor de @Autowired String bean en Spring?
- 30. Java: Spring security 3 Jerarquía de roles
¿Qué tal si lo intentas y luego publicas los resultados? – dm3
Es difícil, no tengo todas las fuentes. – user710818