2016-05-24 15 views
0

Provider(インターフェイス)クラスの種類が異なると、ProviderAProviderBなどと言います。通常の世界では、私はProviderFactoryな今Spring Frameworkでファクトリを実装する正しい方法

public class ProviderFactory{ 
    public Provider getProviderByName(String providerName){ 
     for (Provider provider : availableProviders){ 
      if (provider.getName.equalIgnoreCase(providerName)){ 
       return provider; 
      } 
     } 
     return null; 
    } 
} 

ことというクラスを作成することになり、私はあることを知って欲しい私はシングルトンの方法で、このファクトリクラスを使用する際に役立つannotationsを提供?これらのファクトリは本質的に静的であり、アプリケーション実行時に設定できます。だから私はここでシングルトンの実装を探しています。

答えて

1

@Component//@Repository/@Controller/@RestControllerデフォルトではシングルトンスコープが使用されています。以下に示すように

0

あなたは春の工場のパターンを実装することができます

@Component 
    public class ProviderFactory { 

     @Autowired 
     private ProviderA providerA; 

     @Autowired 
     private ProviderB providerB; 


     public static Provider getProviderByName(String providerName) { 
      if (providerName.equalsIgnoreCase("providerA")) { 
       return providerA; 
      } else if (providerName.equalsIgnoreCase("providerB")) { 
       return providerB; 
      } 
     } 
    } 
0

あなたはステレオタイプの注釈の1(@Component@Service@Repository@Controllerまたは@RestController)と各Providerクラスに注釈を付ける場合は、あなたがすることができますあなたの工場に@Autowireそれらを:

@Component 
public class ProviderFactory { 

    @Autowired 
    private List<Provider> availableProviders; 

    public Provider getProviderByName(String providerName) { 
     for (Provider provider : availableProviders) { 
      if (provider.getName.equalIgnoreCase(providerName)){ 
       return provider; 
      } 
     } 
     return null; 
    } 
} 

ただし、他のあなたのProviderのインスタンスを使用する場合Spring Beanでは、@Qualifier@Autowireと組み合わせて使用​​することをお勧めします。

@Component 
public class ClassThatDependsOnSpecificProvider { 

    @Autowired 
    @Qualifier("providerA") 
    private Provider providerA; 

} 

詳細情報を、約@Qualifier春のリファレンスドキュメントでFine-tuning annotation-based autowiring with qualifiers章で見つけることができます。

関連する問題