Guice依賴注入(一)

本教程主要詳細講解Guice的一些基本注入方式,通過該簡單教程讓我們可以快速使用Guice進行簡單系統化開發,後續我們會更深入講解更多模塊,如果還不瞭解Guice大家可以先去網上自行了解一下.

基礎環境


技術 版本
Java 1.8+
Guice 4.2.3

初始化項目


  • 初始化項目
mvn archetype:generate -DgroupId=com.edurt.sli.guice -DartifactId=guice-basic -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0.0 -DinteractiveMode=false
  • 修改pom.xml增加Guice依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <parent>
        <artifactId>learn-integration-guice</artifactId>
        <groupId>com.edurt.sli.guice</groupId>
        <version>1.0.0</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>guice-basic</artifactId>

    <name>Guice基礎教程</name>

    <properties>
        <system.java.version>1.8</system.java.version>
        <guice.version>4.2.3</guice.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>${guice.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${plugin.maven.compiler.version}</version>
                <configuration>
                    <source>${system.java.version}</source>
                    <target>${system.java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

guice: guice就是我們核心要使用的依賴

Guice的綁定模型

  • src/main/java目錄下新建com.edurt.sli.guice.sample目錄並在該目錄下新建GuiceBasicModule類文件,在文件輸入以下內容
package com.edurt.sli.guice.sample;

import com.google.inject.AbstractModule;

public class GuiceBasicModule extends AbstractModule {

    @Override
    protected void configure() {
    }

}

Guice中的綁定模型和Spring中的一樣簡單,我們通過綁定可以提供給程序任意注入類.

綁定我們需要的Module只需要繼承Guice中的com.google.inject.AbstractModule即可,在configure方法中實現我們需要的綁定信息.

  • com.edurt.sli.guice.sample目錄下構建GuiceBasicService接口類,內容如下
package com.edurt.sli.guice.sample;

public interface GuiceBasicService {

    void print(String output);

}
  • com.edurt.sli.guice.sample目錄下構建GuiceBasicServiceImpl接口實現類,內容如下
package com.edurt.sli.guice.sample;

public class GuiceBasicServiceImpl implements GuiceBasicService {

    public void print(String output) {
        System.out.println(String.format("print %s", output));
    }

}
  • 接下來修改GuiceBasicModule將我們定義的服務進行綁定,代碼如下
package com.edurt.sli.guice.sample;

import com.google.inject.AbstractModule;

public class GuiceBasicModule extends AbstractModule {

    @Override
    protected void configure() {
        bind(GuiceBasicService.class).to(GuiceBasicServiceImpl.class);
    }

}

這樣我們就很快的綁定了一個服務,類似於Spring中的@Bean方式

bind標誌我們需要綁定的類,to標誌我們綁定的實現類

  • com.edurt.sli.guice.sample目錄下構建GuiceBasicApplication類文件用於我們測試代碼,在文件輸入以下內容
package com.edurt.sli.guice.sample;

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

public class GuiceBasicApplication {

    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new GuiceBasicModule());
        GuiceBasicService service = injector.getInstance(GuiceBasicService.class);

        service.print("Hello Guice");
    }

}

我們運行程序,控制檯會輸出如下內容:

print Hello Guice

構造函數綁定


  • 首先我們構建用於注入的服務類,代碼如下
@ImplementedBy(ConstructorServiceImpl.class)
interface ConstructorService {

    void print();

}

@ImplementedBy告知我們程序我們的接口具體實現類,Guice會幫我們做自動實例化

  • 服務實現類,我們打印簡單的字符串,代碼如下
class ConstructorServiceImpl implements ConstructorService {

    @Override
    public void print() {
        System.out.println("Hello Guice By Constructor");
    }

}
  • 使用構造函數進行注入,代碼如下
public class ConstructorApplication {

    private ConstructorService service;

    @Inject
    public ConstructorApplication(ConstructorService service) {
        this.service = service;
    }

    public ConstructorService getService() {
        return service;
    }

    public static void main(String[] args) {
        ConstructorApplication instance = Guice.createInjector().getInstance(ConstructorApplication.class);
        instance.getService().print();
    }

}

我們運行程序,控制檯會輸出如下內容:

Hello Guice By Constructor

打包文件部署


  • 打包數據
mvn clean package -Dmaven.test.skip=true -X

運行打包後的文件即可

java -jar target/guice-binder-1.0.0.jar

源碼地址


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章