2017-10-31 10 views
0

でBeanの要求クラスの情報を取得しますか?次のクラスを考えると春

+0

なぜあなたはその情報が必要でしょうか? –

+0

@SotiriosDelimanolis私は特別なロジックを持つロガーのBeanを作成しようとしていますが、ロガーの初期化にはログを出力するクラスが必要です。 –

+0

どのクラスですか? 'B'オブジェクトを注入したい何百もの* beanがあるかもしれません。このメソッドが呼び出された時点で、Springコンテナはそれらのうちのどれかしか知りません。あなたの質問に答えるには:**いいえ**、それは不可能です。 – Andreas

答えて

1

BがLoggerの場合、約Aを知る必要がある場合は、すべてのロギングフレームワークの動作と同様にFactory Patternを使用する必要があります。

ロギングフレームワークには、通常、グローバルファクトリが1つあります。 Springでは、そのようなファクトリを注入する必要があります。

例:

interface Logger { 
    void log(String message); 
} 

interface LoggerFactory { 
    Logger getLogger(Object context); 
} 

@Component 
class MyLoggerFactory implements LoggerFactory { 
    @Override 
    public Logger getLogger(Object context) { 
     return new Logger() { 
      @Override 
      public void log(String message) { 
       System.out.println(context.getClass().getSimpleName() + 
            " says '" + message + "'"); 
      } 
     } 
    } 
} 

@Component 
class A { 
    private Logger logger; 

    @Inject 
    public void setLogger(LoggerFactory factory) { 
     this.logger = factory.getLogger(this); 
    } 
} 
+0

ああ!愚かな私。そうです、これは私のために働きます。ありがとう! –

関連する問題