2017-02-12 11 views
1

the official document에서 나는 게으른 로딩을위한 Providers에 대한 기사를 읽었습니다. 그러나이 코드가 왜 게으른 로딩에 해당하는 주석이나 코드를 찾을 수 없기 때문에이 코드가 공급자 생성 지연을 의미하는지 이해할 수 없습니다. 그리고 코드는이 코드입니다.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에 대한 생성자가 호출되었지만 그 당시에는 연결이 생성되지 않았습니다. ConnectionlogChargeResult 메서드가 호출 될 때만 생성됩니다 (provider.get() 호출로 인해).