2013-10-27 3 views
8

この質問は少し奇妙に思えるかもしれません。静的メソッドを持つUtilityクラスで使用したいサービスがあるとします。サービスはSpring Beanなので、当然私はsetterと(@Autowired)を使って自分のユーティリティクラスに注入します。 春の文書で言及されているように、すべてのBeanはBeanコンテキスト内で静的です。したがって、クラスにBeanを挿入する場合は、「静的」修飾子を使用する必要はありません。以下を参照してください:注入されたBeanを静的メソッドで使用する正しい方法は何ですか?

 

public class JustAClass{ 
    private Service service; 

    public void aMethod(){ 
    service.doSomething(....); 
    } 

    @Autowired 
    public void setService(Service service){ 
    this.service = service; 
    } 

} 
 

今(静的メソッドでサービスを使用して)私が最初に言及したものに戻って:

 

public class JustAClass{ 
    private static Service service; 

    public static void aMethod(){ 
    service.doSomething(....); 
    } 

    @Autowired 
    public void setService(Service service){ 
    this.service = service; 
    } 

} 
 

サービスが静的であるものの

が、私はその定義の後ろに静的に置くことを余儀なくしています。これは私には直感的ではありません。これは間違っていますか?それとも良い方法ですか? ありがとう

答えて

12

静的フィールドをオートワイヤできません。

しかし、あなたは少し問題を回避することができます:あなたはこれがいいですtmpService

+0

を注入する「コンポーネント」として、このクラスを宣言する必要があること

@Component public class JustAClass{ private static Service service; @Autowired private Service tmpService; @PostConstruct public void init() { service = tmpService; } } 

を注意、私のための作品! – Kaunteya

+0

これは定期的に行われるものですか?あるいは、これらの状況で通常使用される別のアプローチがありますか? –

3

あなたは選択肢がありません。クラスのフィールドstaticを初期化したい場合は、そのクラスのインスタンスを作成してその値を挿入する必要があります。

少しのアドバイス。この場合、実際にstaticメソッドを使用する理由はありません。シングルトンユーティリティが必要な場合は、Beanにsingletonスコープを設定してください。

関連する問題