2017-09-28 1 views
0

私のプロジェクトでは、私は異なるサービスを持っています。各サービスは独自のPermissionを定義できます。各パーミッションに対して、Beanが作成されます。このようにして、Authorizationサービスは、実際にそれらを知らずに、利用可能なすべての許可を注入することができます。beanが2回定義されている場合は例外をスローしますか?

ServiceAPermission定義は次のようになります。

@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は以下のPermission Sを定義します:明らかに

@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); 
    } 
} 

が、これは定義された豆の名前の衝突などで終了します私はgetReadPermissionという名前のBeanを2回定義しました。もちろん、私はgetServiceAReadPermissionのようなメソッドに名前を付けることができるので、それらは区別されますが、これは慣習であり無視されます。

この場合、Springは重複した定義について私に通知しません。単にインスタンスを生成し、他の定義を無視します。 Beanが2回定義されている場合、SpringにExceptionを投げるように指示する方法はありますか?このようにして、重複した定義が常に認識されます。

また、メソッド署名の代わりにランダムなBean名を使用する必要があることをSpringに伝える方法がありますか?私は各豆に手作業で名前を付けることができることを知っていますが、私はそれを避けたいと思います。開発者はこれを強制することはなく、それでもそれを忘れるかもしれません。

+0

のラインに沿って、何が必要ありませんPermissionFactory-豆を提供することをお勧めしたいです豆。 – Ivan

答えて

0

そのデザインはあまり論理的ではないようです。 Beanは一度しか使用できないと考えられています。

私はおそらくあなたが重複した場合に例外をスロー思われるBeanPostProcessorを登録することにより、必要な検証を実行してもよい

@Component 
public class PermissionFactory { 
    public Permission createFactory() { 
     // create A or B permission randomly, as you wanted 
    } 
} 
+0

ありがとう、私は豆を登録している工場に行きました。それは完璧に動作し、私は既に存在するパーミッションBeanに反応することができます。 –

関連する問題