guice学习笔记(一) - 初体验

Guice轻量级依赖注入框架初体验
本文介绍了Google开源的轻量级依赖注入框架Guice。包含了使用Guice时的Maven依赖配置,还给出了两个使用Guice的示例代码,如HelloPrinter.java、Sample.java等,最后提供了相关参考资料链接。

guice初体验

guice是Google开源的轻量级依赖注入框架。

maven依赖

        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>4.0</version>
        </dependency>

        <dependency>
            <groupId>com.google.inject.extensions</groupId>
            <artifactId>guice-multibindings</artifactId>
            <version>4.0</version>
        </dependency>

第一个demo

HelloPrinter.java

import javax.inject.Singleton;

@Singleton
public class HelloPrinter {
    public void print() {
        System.out.println("Hello, World");
    }
}

Sample.java

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

import javax.inject.Singleton;

@Singleton
public class Sample {

    @Inject
    private HelloPrinter printer;

    public void hello() {
        printer.print();
    }

    public static void main(String[] args) {
        Injector injector = Guice.createInjector();
        Sample sample = injector.getInstance(Sample.class);
        sample.hello();
    }
}

第二个demo

HelloPrinterInterface.java

import com.google.inject.ImplementedBy;

//@ImplementedBy(SimpleHelloPrinter.class)
public interface HelloPrinterInterface {
    void print();
}


import javax.inject.Singleton;

@Singleton
public class SimpleHelloPrinter implements HelloPrinterInterface {
    @Override
    public void print() {
        System.out.println("Hello, Simple World");
    }
}


import javax.inject.Singleton;

@Singleton
public class ComplexHelloPrinter implements HelloPrinterInterface {
    @Override
    public void print() {
        System.out.println("Hello, Complex World");
    }
}

SampleModule.java

import com.google.inject.AbstractModule;
import com.google.inject.multibindings.MapBinder;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Names;

public class SampleModule extends AbstractModule {
    @Override
    protected void configure() {
        //bind(HelloPrinterInterface.class).to(ComplexHelloPrinter.class);
        bind(HelloPrinterInterface.class).annotatedWith(Names.named("simple"))
		.to(SimpleHelloPrinter.class);
        bind(HelloPrinterInterface.class).annotatedWith(Names.named("complex"))
		.to(ComplexHelloPrinter.class);

        Multibinder<HelloPrinterInterface> printerSets = Multibinder
		.newSetBinder(binder(), HelloPrinterInterface.class);
        printerSets.addBinding().to(SimpleHelloPrinter.class);
        printerSets.addBinding().to(ComplexHelloPrinter.class);

        MapBinder<String, HelloPrinterInterface> printerMaps = MapBinder
		.newMapBinder(binder(), String.class, HelloPrinterInterface.class);
        printerMaps.addBinding("simple").to(SimpleHelloPrinter.class);
        printerMaps.addBinding("complex").to(ComplexHelloPrinter.class);
    }
}

Sample.java

import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.name.Named;

import javax.inject.Singleton;
import java.util.Map;
import java.util.Set;

@Singleton
public class Sample {

    @Inject
    @Named("complex")
    private HelloPrinterInterface printer;

    @Inject
    private Set<HelloPrinterInterface> printerSets;

    @Inject
    private Map<String, HelloPrinterInterface> printerMaps;

    public void hello() {
        printer.print();
    }

    public void helloSet() {
        for (HelloPrinterInterface printer : printerSets) {
            printer.print();
        }
    }

    public void helloMap() {
        for (String key : printerMaps.keySet()) {
            printerMaps.get(key).print();
        }
    }

    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new SampleModule());
        Sample sample = injector.getInstance(Sample.class);
        sample.hello();
        sample.helloSet();
        sample.helloMap();
    }

}

参考资料

转载于:https://my.oschina.net/mengzhang6/blog/2873124

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值