CadaPropiedad en el método de fábrica con ConfigurationInject.
Intentando inyectar múltiples instancias únicas de ThirdPartyClass
mediante @EachProperty
.
Dado que no soy el propietario de ThirdPartyClass
, estoy utilizando @Factory
para este propósito, de la siguiente manera:
@Factory
public class ThirdPartyClassFactory {
@EachProperty("xyz")
@ConfigurationInject
public ThirdPartyClass thirdPartyClass(int a) {
return new ThirdPartyClass(a);
}
}
Y la configuración:
xyz:
default:
a: 5
another:
a: 9
Pero al ejecutar esto, obtengo el siguiente mensaje:
Error al inyectar el valor para el parámetro [a] del método [thirdPartyClass]
No existe un bean de tipo [int]. Asegúrese de que el bean ...
Sin embargo, si yo fuera el propietario de ThirdPartyClass
, el siguiente enfoque funcionaría bien:
@EachProperty("xyz")
public class ThirdPartyClass {
@ConfigurationInject
public ThirdPartyClass(int a) {
}
}
Ten en cuenta que no se trata de que @EachProperty
no funcione en los métodos de fábrica en absoluto, simplemente no pude hacer que inyecte propiedades como lo haría con @EachProperty
en la definición de la clase.
¿Alguien podría arrojar luz sobre esto? Probablemente solo me esté perdiendo alguna parte de la documentación.
davy.ai
Solución para inyectar múltiples singletons de
ThirdPartyClass
a través de@EachProperty
Cuando intentas inyectar múltiples singletons de
ThirdPartyClass
a través de@EachProperty
, no puedes usar la anotación@ConfigurationInject
en el método de fábrica, como se muestra en el siguiente fragmento de código:Esto se debe a que
@ConfigurationInject
se utiliza para inyectar propiedades de configuración en instancias de beans administrados por Micronaut, y no para inyectar propiedades en métodos de fábrica.Para solucionar este problema, puedes utilizar la anotación
@Value
para inyectar la propiedad de configuración, como se muestra a continuación:En el código anterior, la anotación
@Value
se utiliza para inyectar la propiedad de configuración${xyz.${property}.a}
en el métodothirdPartyClass
. El marcador de posición${property}
se resuelve al nombre de la propiedad actual que está siendo procesada por@EachProperty
.Con este enfoque, Micronaut resuelve el valor de configuración en tiempo de ejecución e lo inyecta en el parámetro del método.
¡Espero que esto te ayude!