Guice依赖注入的三种方式和injectMembers方法的使用

package com.ilucky.guice.test4;

import com.google.inject.Guice;
import com.google.inject.Injector;

/** * v1.0:20161114 * 注解:依赖注入@Inject * 依赖注入的方式有三种:属性注入,构造方法注入和setter方法注入. * Injector.injectMembers方法的使用: * 即如果某个对象是new出来的,但是它里面的对象需要依赖需要注入,则可使用injectMembers方法. * @author IluckySi */
public class MainTest {

    public static void main(String[] args) {
        Injector injector = Guice.createInjector();
        Person person = injector.getInstance(Person.class);
        person.diplayInfo();

        System.out.println("-------------Injector.injectMembers------------------");
        Person2 person2 = injector.getInstance(Person2.class);
        person2.diplayInfo();

    }
}
/** Mobile:[Mobile: 988438434] Laptop:[Laptop: HP 323233232,$545034] Other:[Other: IluckySi] -------------Injector.injectMembers------------------ Laptop:[Laptop: HP 323233232,$545034] */
package com.ilucky.guice.test4;

import com.google.inject.Inject;

public class Person {

    private Other other;
    private Mobile mobile;
    @Inject
    private Laptop laptop;

    @Inject
    public Person(Mobile mobile) {
        this.mobile = mobile;
    }

    @Inject
    public void setother(Other other) {
        this.other = other;
    }

    public void diplayInfo() {
        System.out.println("Mobile:" + mobile);
        System.out.println("Laptop:" + laptop);
        System.out.println("Other:" + other);
    }
}
package com.ilucky.guice.test4;

public class Other {

    private String name;

    public Other() {
        this.name = "IluckySi";
    }

    public String toString() {
        return "[Other: " + name + "]";
    }
}
package com.ilucky.guice.test4;

public class Mobile {

    private String number;

    public Mobile() {
        this.number = "988438434";
    }

    public String toString() {
        return "[Mobile: " + number + "]";
    }
}
package com.ilucky.guice.test4;

public class Laptop {

    private String model;
    private String price;

    public Laptop() {
        this.model = "HP 323233232";
        this.price = "$545034";
    }

    public String toString() {
        return "[Laptop: " + model + "," + price + "]";
    }
}
package com.ilucky.guice.test4;

import com.google.inject.Guice;
import com.google.inject.Injector;

public class Person2 {

    private Home h;

    public Person2() {
        h = new Home();
    }

    public void diplayInfo() {
        Injector injector = Guice.createInjector();
        injector.injectMembers(h);
        h.diplayInfo();
    }
}
package com.ilucky.guice.test4;

import com.google.inject.Inject;

public class Home {

    @Inject
    private Laptop laptop;

    public void diplayInfo() {
        System.out.println("Laptop:" + laptop);
    }
}

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...