userdetails tutorial mvc example spring dependency-injection autowired

tutorial - userdetailsservice spring security 4



¿Cómo funciona Spring @Autowired? (4)

Encontré un ejemplo de @Autowired

public class EmpManager { @Autowired private EmpDao empDao; }

Tenía curiosidad acerca de cómo el empDao obtiene conjuntos ya que no hay métodos setter y es privado.


Java le permite interactuar con miembros privados de una clase a través de la reflexión.

Consulte ReflectionTestUtils , que es muy útil para escribir pruebas unitarias.


Java permite que se desactiven los controles de acceso en un campo o método (sí, hay una comprobación de seguridad para pasar primero) a través del método AccessibleObject.setAccessible() que es parte del marco de reflexión (tanto Field como Method heredan de AccessibleObject ). Una vez que el campo puede ser descubierto y escrito, es bastante trivial hacer el resto; simplemente una Materia Simple de Programación .


No necesita ningún setter, solo tiene que declarar el Class EmpDao con el componente @ de anotación para que Spring lo identifique como parte de los componentes que están contenidos en ApplicationContext ...

Tienes 2 soluciones:

  • Para declarar manualmente sus beans en el archivo XML applicationContext:

  • Para utilizar la detección automática al establecer estas líneas en su archivo de contexto:

<context: component-scan base-package = "paquete" />

<contexto: anotación-config />

Y usar la anotación de primavera para declarar las clases que su contenedor de resorte administrará como componentes

ex:

@Component class EmpDao {...}

Y 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(); } ... }

El autocableado ocurre colocando una instancia de un frijol en el campo deseado en una instancia de otro frijol. Ambas clases deben ser beans, es decir, deben definirse para vivir en el contexto de la aplicación.

Spring conoce la existencia de los beans EmpDao y MyClass y crea una instancia de EmpDao en MyClass automáticamente