Quarkus Extension - Additional Bean Build Item
Après les ApplicationIndexBuildItem
et CombinedIndexBuildItem
continuons notre tour des builds items Quarkus
avec l’AdditionalBeanBuildItem
. Ce build item fait partie des items permettant le paramétrage de la bibliothèque Arc
en charge de la gestion de l’injection de dépendance dans Quarkus.
Quarkus et l’injection de dépendances
Quarkus utilise massivement l’injection de dépendance. Cela permet d’avoir un couplage faible entre les différents objets
d’une application Quarkus. Pour cela, Quarkus utilise une bibliothèque nommée Arc. Arc va automatiquement scanner le classpath
de l’application et référencer pour injection l’ensemble des classes déclarées comme bean (celle annotée avec @Controller
, @Service
, …).
Dans le cadre d’une extension, il peut être intéressant de déclarer les objets fournis par l’extension comme bean pour les
rendre injectables. Une extension peut aussi avoir besoin de déclarer comme bean injectable des objets, de l’application cible ou de ses dépendances,
non annotées par une Annotation reconnue par Quarkus. C’est là qu’intervient l’AdditionalBeanBuildItem
.
AdditionalBeanBuildItem
Ce build item s’utilise très simplement dans sa forme la plus simple en prenant en paramètre la classe à déclarer comme bean.
On le combinera la plupart du temps avec un autre BuildItem (ex: CombinedIndexBuildItem) en entrée de manière à récupérer les classes à déclarer comme bean.
Par défauts, seuls les beans détectés comme utilisés lors du build par Quarkus seront conservés. Cela peut être paramétré comme ceci :
Le scope du bean peut également être spécifié comme ceci dans le cas où la classe ne spécifierait pas de scope. D’après la documentation, cette méthode ne doit être utilisée que si aucune annotation ne peut être directement sur la classe cible.
Conclusion
L’AdditionalBeanBuildItem
est un build item très utilisé par les extensions Quarkus pour rendre leur bean injectable dans
les applications utilisant ces extensions. Le second cas d’usage est de rendre injectable des objets non déclarés comme bean
dans des bibliothèques tierces.