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.

¿Fue útil?

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

Lectura adicional

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top