本教程主要詳細講解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