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/injectMembers

injectMembersはどこまで?

こちらの制御が及ばないところで、勝手にオブジェクトがnewされてしまうことがある。 例えば、フレームワークにクラスだけを渡しておくと、そのフレームワークが勝手にインスタンスを生成する場合がある。

このようなインスタンスに対して後から依存性を注入することができる。

public class Sample {
}
....
public class Tree {

  @Inject Sample sample;
  Tree left;
  Tree right;
  
  public void show() {
    System.out.println("sample " + sample);
    if (left != null) left.show();
    if (right != null) right.show();
  }
  
  public static void main(String[]args) {
    Tree tree = new Tree();
    tree.left = new Tree();
    tree.right = new Tree();
    Injector injector = Guice.createInjector();
    injector.injectMembers(tree);
    
    tree.show();
  }
}

実行結果は、

sample test.Sample@e94e92
sample null
sample null

となる。つまり、injectMembersに直接指定したインスタンスのメンバーは注入されるが、間接的に参照しているものは無視されてしまう。