Dans mon projet j'ai différents services. Chaque service peut définir ses propres Permission
s. Pour chaque permission, un bean sera créé. De cette façon, le service Authorization
peut injecter toutes les autorisations disponibles, sans les connaître.Lancer une exception si le bean est défini deux fois?
La définition Permission
de ServiceA
ressemblera à ceci:
@Configuration()
public class ServiceAPermissions extends Permissions {
private static final String BASE = "servicea";
public static final String SERVICEA_READ = join(BASE, READ);
public static final String SERVICEA_WRITE = join(BASE, WRITE);
@Bean()
Permission getReadPermission() {
return new Permission(SERVICEA_READ);
}
@Bean()
Permission getWritePermission() {
return new Permission(SERVICEA_WRITE);
}
}
ServiceB
définira les Permission
s suivantes:
@Configuration()
public class ServiceBPermissions extends Permissions {
private static final String BASE = "serviceb";
public static final String SERVICEB_READ = join(BASE, READ);
@Bean()
Permission getReadPermission() {
return new Permission(SERVICEB_READ);
}
}
De toute évidence, cela va finir dans un conflit de noms des grains définis comme J'ai défini un bean avec le nom getReadPermission
deux fois. Si je peux bien sûr nommer les méthodes comme getServiceAReadPermission
afin qu'ils soient distingués, mais ce n'est qu'une convention, qui pourrait être ignorée.
Dans cette situation, Spring ne m'avise pas de la définition en double, il instanciera simplement l'un et ignorera l'autre définition. Existe-t-il un moyen de dire à Spring de lancer un Exception
, si un bean est défini deux fois? De cette façon, on serait toujours au courant d'une définition en double.
Alternativement, est-il un moyen de dire au printemps, qu'il devrait utiliser un nom de bean aléatoire au lieu de la signature de la méthode? Je sais que je peux donner un nom manuellement à chaque bean @Bean(name = "A name")
, mais j'aime éviter cela, car un dev ne sera pas obligé de le faire et pourrait l'oublier.
probablement vous pouvez mettre en œuvre la vérification requise par l'enregistrement d'un BeanPostProcessor qui jetterait une exception en cas de double des haricots. – Ivan