En primer lugar, y más importante - todos los granos de la primavera son administrados - que "en vivo" dentro de un recipiente, llamado "contexto de aplicación".
En segundo lugar, cada aplicación tiene un punto de entrada a ese contexto. Las aplicaciones web tienen un Servlet, JSF usa un el-resolver, etc. Además, hay un lugar donde el contexto de la aplicación se inicializa y todos los beans se autoconectan. En aplicaciones web, esto puede ser un oyente de inicio.
El autoenrutamiento 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.
¿Qué es "vivir" en el contexto de la aplicación? Esto significa que el contexto instancia los objetos, no usted. Es decir. - Nunca hace new UserServiceImpl()
- el contenedor encuentra cada punto de inyección y establece una instancia allí.
En sus controladores, que acaba de tener lo siguiente:
@Controller // Defines that this class is a spring bean
@RequestMapping("/users")
public class SomeController {
// Tells the application context to inject an instance of UserService here
@Autowired
private UserService userService;
@RequestMapping("/login")
public void login(@RequestParam("username") String username,
@RequestParam("password") String password) {
// The UserServiceImpl is already injected and you can use it
userService.login(username, password);
}
}
algunas notas:
- En su
applicationContext.xml
que debe permitir a la <context:component-scan>
por lo que las clases se analizan en busca de la @Controller
, @Service
, anotaciones, etc.
- El punto de entrada para una aplicación Spring-MVC es el DispatcherServlet, pero está oculto y, por lo tanto, la interacción directa y el arranque del contexto de la aplicación ocurren detrás de la escena.
UserServiceImpl
también se debe definir como bean, ya sea usando <bean id=".." class="..">
o usando la anotación @Service
. Como será el único implementador de UserService
, se inyectará.
- Además de la anotación
@Autowired
, Spring puede usar el autoconexión configurable por XML. En ese caso, todos los campos que tienen un nombre o tipo que coincide con un bean existente obtienen automáticamente un bean inyectado. De hecho, esa fue la idea inicial del autoenvío: tener campos inyectados con dependencias sin ninguna configuración. Otras anotaciones como @Inject
, @Resource
también se pueden utilizar.
duplicado posible de [Entendiendo uso Primavera @Autowired] (https: // stackoverflow.com/questions/19414734/understanding-spring-autowired-usage) – tkruse