vertical - swing fillers java
¿Cuál es el comportamiento esperado de @PostConstruct en las clases @Configuration? (1)
Estamos reutilizando un proyecto que define sus beans con spring java-config (usando @Configuration), y en una de esas clases tiene un método init @PostConstruct
.
¿Cuál es el comportamiento esperado aquí? ¿Cuándo se invoca este método? En lo que respecta a los frijoles, eso es. Es decir, ¿este método se comporta exactamente como si la clase de configuración fuera un frijol (y en realidad es uno?)
Lo que observamos es que, dependiendo del sistema operativo, se puede invocar antes de que los beans que están @Autowired
en la clase de configuración se inicialicen y, por lo tanto, termine trabajando con dependencias incompletas.
Incluso para @Configuration
, @PostConstruct
comporta como se esperaba: se invoca después de que se hayan inyectado las dependencias de la clase. Aunque esto es un poco confuso (junto con el hecho de que @Configuration
clases @Configuration
son beans), es correcto.
El problema en cuestión era una dependencia circular oculta introducida con la ayuda de spring-security-oauth: es un conjunto intrincado de configuraciones que está más allá del alcance de esta discusión.
Entonces, se puede invocar a @PostConstruct
si los beans dependientes no se inicializan completamente solo en caso de dependencias circulares. Si las dependencias se suministran a través de setter o inyección de campo, la dependencia circular no se informa, y en su lugar se usan beans incompletos.
También algo a tener en cuenta aquí es que parece que el manejo de dependencia circular depende del sistema operativo (lo que significa algunas diferencias JVM o JRE).