Un Bean es cualquier objeto gestionado por el contenedor Spring. Spring crea, configura, inyecta y destruye los beans — el programador solo los declara.
Spring detecta los beans mediante anotaciones:
@Component // bean genérico
@Service // capa de servicio (semántica)
@Repository // capa de acceso a datos (+ traducción de excepciones)
@Controller // capa web MVC
@Bean // bean declarado manualmente en @ConfigurationCiclo de vida de un Bean:
1. Instanciación (constructor)
2. Inyección de dependencias
3. @PostConstruct ← inicialización personalizada
4. Bean en uso
5. @PreDestroy ← limpieza antes de destrucción
6. Destrucción
Scopes:
| Scope | Instancias | Contexto |
|---|---|---|
singleton |
Una por contenedor (default) | Cualquiera |
prototype |
Nueva por cada inyección | Cualquiera |
request |
Una por petición HTTP | Web |
session |
Una por sesión HTTP | Web |
application |
Una por ServletContext | Web |
¡Cuidado con inyectar prototype en singleton!
Si un bean singleton inyecta un bean prototype, el prototype solo se crea una vez (en la inicialización del singleton). Para obtener una nueva instancia en cada llamada, usa ApplicationContext.getBean() o @Lookup.
- Spring gestiona el ciclo de vida automáticamente.
- Scope
singletonpor defecto: eficiente para stateless services. @PostConstructpara inicialización después de DI (conexiones, caché inicial).@PreDestroypara limpieza ordenada (cerrar conexiones, flush de recursos).
Ver ExpBeans.java, ExpBeanPostProcessor.java, ExpFactoryBean.java y ExpConditional.java para ejemplos ejecutables con ciclo de vida de beans, scopes, @PostConstruct y configuración condicional.