に基づいて、クラスの異なるインスタンスを注入するスプリングを使用した:私はこれらの線に沿ったクラス構造を有するインスタンス階層
public class Worker {
private Parser parser;
private Validator validator;
private Feeder feeder;
//...
}
Parser
、Validator
とFeeder
は、すべての異なる実装するクラスとのインタフェースです。これらのフィールドは、ワーカーのインスタンス化のコンテキスト内でインスタンス化され、ワーカー間で共有されません。
私がしたいことは、各ワーカーに対してorg.slf4j.Logger
の単一のインスタンスを作成し、必要に応じてパーサー、バリデーター、フィーダーによって使用されることです。基本的には、インスタンス生成時に、我々はそうのように、すべてのログは、その名前を使用していその後、労働者に名前を付け、そしてたい:
public class XmlParser implements Parser {
@Autowired
private Logger logger;
//...
}
:
org.slf4j.LoggerFactory.getLogger(workerName)
理想的には、私はこれらの線に沿って解決策を希望します
そして、同じWorkerに属するすべてのオブジェクトでLoggerの同じインスタンスを使用するようにSpring Frameworkのautowiring機能を設定します。異なる労働者は明らかに異なるロガーインスタンスを取得する必要があります。すべての3つのインターフェイスを強制的に、Validator
とFeeder
setLogger()
タイプのメソッドを指定するには、少なくとも控えめに言ってもエレガントではないようです。
巧妙な依存性注入ソリューションを使用してこのタスクを達成するにはどうすればよいですか?
また、['LoggerFactory.getLogger(Worker.class);'](http://slf4j.org/api/org/slf4j/LoggerFactory.html) –
@JohanSjöberg:ワーカーのいくつかのインスタンスそのシナリオでは同じLoggerを共有します。それが要件でない場合は、次のようなソリューションを使用できます:http://jgeeks.blogspot.com/2008/10/auto-injection-of-logger-into-spring.html –