¿Cómo anotación primavera @Autowired trabajo?
-
30-09-2019 - |
Pregunta
Me encontré con un ejemplo de @Autowired
:
public class EmpManager {
@Autowired
private EmpDao empDao;
}
tenía curiosidad acerca de cómo el empDao
obtener conjuntos ya que no existen métodos setter y es privado.
Solución
Java permite que los controles de acceso en un campo o método para estar apagados (sí, hay un control de seguridad que pasar primero) a través de la método AccessibleObject.setAccessible()
que forma parte del marco de reflexión (tanto Field
y Method
heredar del AccessibleObject
). Una vez que el campo puede ser descubierto y se escribe en, es bastante trivial para hacer el resto de la misma; simplemente un simple cuestión de programación .
Otros consejos
Java le permite interactuar con los miembros privados de una clase a través de la reflexión.
ReflectionTestUtils , que es muy útil para escribir pruebas unitarias.
No hay necesidad de ningún organismo, sólo hay que declarar la clase EmpDao
con el @component
anotación con el fin de que la primavera lo identifica como parte de los componentes que están contenidos en el Application Context ...
Usted tiene 2 soluciones:
- Para declarar manualmente sus granos en el archivo XML applicationContext:
<bean class="package.EmpDao" />
- Para utilizar la detección automática por seeting estas líneas en su archivo de contexto:
<context:component-scan base-package="package" />
<context:annotation-config />
y para utilizar la anotación de primavera para declarar las clases que su contenedor de primavera gestionará como componentes:
@Component
class EmpDao {...}
y para anotar su referencia por @Autowired
:
@Component (or @Controller, or @Service...)
class myClass {
// tells the application context to inject an instance of EmpDao here
@Autowired
EmpDao empDao;
public void useMyDao()
{
empDao.method();
}
...
}
Autowiring sucede mediante la colocación de una instancia de un grano en el campo deseado en una instancia de otro bean. Ambas clases deben ser granos, es decir, que deben definirse vivir en el contexto de aplicación.
Primavera conoce la existencia del EmpDao
habas y MyClass
y creará una instancia automáticamente una instancia de EmpDao
en MyClass
.
Spring utiliza la API CGLIB para proporcionar la inyección de dependencia autowired.
Referencias
- Uso del foro comentario CGLIB por Rod Johnson
- 3.3.1. Inyectar dependencias
- Pro primavera - Analizar la primavera dependencias
Lectura adicional
- Introducción a Spring Framework por Rod Johnson