在我的项目中,我有不同的服务。每个服务都可以定义自己的Permission
。对于每个权限,将创建一个bean。这样,Authorization
服务可以注入所有可用权限,而无需实际了解它们。
Permission
的{{1}}定义如下所示:
ServiceA
@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
s:
Permission
显然,这将以定义的bean的名称冲突结束,因为我已经定义了一个名为@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);
}
}
的bean两次。如果我当然可以命名像getReadPermission
这样的方法,那么它们将被区分,但这只是一个约定,可能会被忽略。
在这种情况下,Spring没有通知我有关重复定义的信息,它只是实例化一个并忽略另一个定义。如果bean定义了两次,有没有办法告诉Spring抛出getServiceAReadPermission
?通过这种方式,人们将始终意识到重复的定义。
或者,有没有办法告诉spring,它应该使用随机bean名称而不是方法签名?我知道我可以手动给每个bean一个名字Exception
,但我想避免这样做,因为开发人员不会被迫这样做,但仍然会忘记它。
答案 0 :(得分:0)
这种设计似乎不合逻辑。一个bean应该只有一次可用,你以不同的方式使用它。
我建议提供一个PermissionFactory-Bean,按照
的顺序提供你需要的东西。@Component
public class PermissionFactory {
public Permission createFactory() {
// create A or B permission randomly, as you wanted
}
}