Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

guice/Manual/BestPractices/InjectOnlyDirectDependencies

直接依存のみを注入せよ

他のオブジェクトを取得するためだけのオブジェクトを注入することを避けよう。 例えば、Accountを取得するためだけにCustomerを注入することはしないように。

public class ShowBudgets { 
   private final Account account; 

   @Inject 
   ShowBudgets(Customer customer) { 
     account = customer.getPurchasingAccount(); 
   } 

その代わりに依存を直接注入すべきである。これによってテストが簡単になる。 テストケースはCustomerについて考慮する必要がなくなる。

モジュールの中で@Providesを使ってAccountのバインディングを作成しよう。 そして、その中でCustomerのバインディングを用いる。

public class CustomersModule extends AbstractModule { 
  @Override public void configure() {
    ...
  }

  @Provides 
  Account providePurchasingAccount(Customer customer) { 
    return customer.getPurchasingAccount();
  }

依存を直接注入することにより、コードはシンプルになる。

public class ShowBudgets { 
   private final Account account; 

   @Inject 
   ShowBudgets(Account account) { 
     this.account = account; 
   }