2017-02-12 4 views
1

the official documentで、私は遅延ロードのプロバイダについての記事を読んだ。しかし、なぜこのコードの下に、遅延ロードに対応する注釈やコードが見つからないため、プロバイダを作成するのが遅れているのか理解できません。 コードはこのコードです。Guiceでの遅延ロードのプロバイダ

public class DatabaseTransactionLog implements TransactionLog { 

    private final Provider<Connection> connectionProvider; 

    @Inject 
    public DatabaseTransactionLog(Provider<Connection> connectionProvider) { 
    this.connectionProvider = connectionProvider; 
    } 

    public void logChargeResult(ChargeResult result) { 
    /* only write failed charges to the database */ 
    if (!result.wasSuccessful()) { 
     Connection connection = connectionProvider.get(); 
    } 
    } 

ローディングの遅延を引き起こす特別な点はどこにありますか?

+0

通常、依存関係が満たされると、必要なオブジェクトが作成されます。 Providersでは、 'get()'が呼び出されるまで、必要なオブジェクトは作成されません。 –

答えて

3

接続を作成するのは高価な場合があり、必要ではない場合もあります。したがって、注入時に接続を作成するのではなく、guiceフレームワークは 'プロバイダ'の注入を許可し、get()メソッドが呼び出されたときに依存関係を作成します。

遅れは、provider.get()と呼ばれる方法であり、各依存関係に対してコンストラクターが呼び出された時間に比べて遅延しています。あなたが持っている例では、DatabaseTransactionLogのコンストラクタが呼び出されますが、その時点では接続は作成されません。 Connectionは、logChargeResultメソッドが呼び出されたときにのみ作成されます(provider.get()呼び出しのため)。