Skip to content

Commit 871baf0

Browse files
committed
Guice依赖注入(一)
1 parent 2f9db9d commit 871baf0

13 files changed

+452
-0
lines changed

README.md

+6
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,9 @@ Spring整合学习中心
4040
- [Spring DataJPA MongoDB教程(基础版)](datajpa/datajpa-mongodb/DOC.md)
4141
- [Spring DataJPA MongoDB教程(Template版)](datajpa/datajpa-mongodb-template/DOC.md)
4242
- [Spring DataJPA JDBC教程(基础版)](datajpa/datajpa-jdbc/DOC.md)
43+
44+
- [Guice教程](guice/README.md)
45+
46+
- [Guice依赖注入(一)](guice/binder/DOC.md)
47+
48+

guice/README.md

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Guice
2+
---
3+
4+
Guice系列整合教程.
5+
6+
### 技术分布
7+
8+
---
9+
10+
|技术|版本|
11+
|:---:|---|
12+
|Java|1.8+|
13+
|Guice|4.2.3|
14+
15+
### 整合模块
16+
---
17+
18+
- [Guice依赖注入(一)](binder/DOC.md)

guice/binder/DOC.md

+252
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
# Guice依赖注入(一)
2+
3+
本教程主要详细讲解Guice的一些基本注入方式,通过该简单教程让我们可以快速使用Guice进行简单系统化开发,后续我们会更深入讲解更多模块,如果还不了解Guice大家可以先去网上自行了解一下.
4+
5+
#### 基础环境
6+
7+
---
8+
9+
| 技术 | 版本 |
10+
| ----- | ----- |
11+
| Java | 1.8+ |
12+
| Guice | 4.2.3 |
13+
14+
#### 初始化项目
15+
16+
---
17+
18+
- 初始化项目
19+
20+
```bash
21+
mvn archetype:generate -DgroupId=com.edurt.sli.guice -DartifactId=guice-basic -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0.0 -DinteractiveMode=false
22+
```
23+
24+
- 修改pom.xml增加Guice依赖
25+
26+
```xml
27+
<?xml version="1.0" encoding="UTF-8"?>
28+
<project xmlns="http://maven.apache.org/POM/4.0.0"
29+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
30+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
31+
32+
<parent>
33+
<artifactId>learn-integration-guice</artifactId>
34+
<groupId>com.edurt.sli.guice</groupId>
35+
<version>1.0.0</version>
36+
</parent>
37+
38+
<modelVersion>4.0.0</modelVersion>
39+
40+
<artifactId>guice-basic</artifactId>
41+
42+
<name>Guice基础教程</name>
43+
44+
<properties>
45+
<system.java.version>1.8</system.java.version>
46+
<guice.version>4.2.3</guice.version>
47+
</properties>
48+
49+
<dependencies>
50+
<dependency>
51+
<groupId>com.google.inject</groupId>
52+
<artifactId>guice</artifactId>
53+
<version>${guice.version}</version>
54+
</dependency>
55+
</dependencies>
56+
57+
<build>
58+
<plugins>
59+
<plugin>
60+
<groupId>org.apache.maven.plugins</groupId>
61+
<artifactId>maven-compiler-plugin</artifactId>
62+
<version>${plugin.maven.compiler.version}</version>
63+
<configuration>
64+
<source>${system.java.version}</source>
65+
<target>${system.java.version}</target>
66+
</configuration>
67+
</plugin>
68+
</plugins>
69+
</build>
70+
71+
</project>
72+
```
73+
74+
`guice`: guice就是我们核心要使用的依赖
75+
76+
#### Guice的绑定模型
77+
78+
-`src/main/java`目录下新建**com.edurt.sli.guice.sample**目录并在该目录下新建`GuiceBasicModule`类文件,在文件输入以下内容
79+
80+
```java
81+
package com.edurt.sli.guice.sample;
82+
83+
import com.google.inject.AbstractModule;
84+
85+
public class GuiceBasicModule extends AbstractModule {
86+
87+
@Override
88+
protected void configure() {
89+
}
90+
91+
}
92+
```
93+
94+
Guice中的绑定模型和Spring中的一样简单,我们通过绑定可以提供给程序任意注入类.
95+
96+
绑定我们需要的Module只需要继承Guice中的`com.google.inject.AbstractModule`即可,在`configure`方法中实现我们需要的绑定信息.
97+
98+
-**com.edurt.sli.guice.sample**目录下构建`GuiceBasicService`接口类,内容如下
99+
100+
```java
101+
package com.edurt.sli.guice.sample;
102+
103+
public interface GuiceBasicService {
104+
105+
void print(String output);
106+
107+
}
108+
```
109+
110+
-**com.edurt.sli.guice.sample**目录下构建`GuiceBasicServiceImpl`接口实现类,内容如下
111+
112+
```java
113+
package com.edurt.sli.guice.sample;
114+
115+
public class GuiceBasicServiceImpl implements GuiceBasicService {
116+
117+
public void print(String output) {
118+
System.out.println(String.format("print %s", output));
119+
}
120+
121+
}
122+
```
123+
124+
- 接下来修改`GuiceBasicModule`将我们定义的服务进行绑定,代码如下
125+
126+
```java
127+
package com.edurt.sli.guice.sample;
128+
129+
import com.google.inject.AbstractModule;
130+
131+
public class GuiceBasicModule extends AbstractModule {
132+
133+
@Override
134+
protected void configure() {
135+
bind(GuiceBasicService.class).to(GuiceBasicServiceImpl.class);
136+
}
137+
138+
}
139+
```
140+
141+
这样我们就很快的绑定了一个服务,类似于Spring中的`@Bean`方式
142+
143+
`bind`标志我们需要绑定的类,`to`标志我们绑定的实现类
144+
145+
-**com.edurt.sli.guice.sample**目录下构建`GuiceBasicApplication`类文件用于我们测试代码,在文件输入以下内容
146+
147+
```java
148+
package com.edurt.sli.guice.sample;
149+
150+
import com.google.inject.Guice;
151+
import com.google.inject.Injector;
152+
153+
public class GuiceBasicApplication {
154+
155+
public static void main(String[] args) {
156+
Injector injector = Guice.createInjector(new GuiceBasicModule());
157+
GuiceBasicService service = injector.getInstance(GuiceBasicService.class);
158+
159+
service.print("Hello Guice");
160+
}
161+
162+
}
163+
```
164+
165+
我们运行程序,控制台会输出如下内容:
166+
167+
```base
168+
print Hello Guice
169+
```
170+
171+
#### 构造函数绑定
172+
173+
---
174+
175+
- 首先我们构建用于注入的服务类,代码如下
176+
177+
```java
178+
@ImplementedBy(ConstructorServiceImpl.class)
179+
interface ConstructorService {
180+
181+
void print();
182+
183+
}
184+
```
185+
186+
`@ImplementedBy`告知我们程序我们的接口具体实现类,Guice会帮我们做自动实例化
187+
188+
- 服务实现类,我们打印简单的字符串,代码如下
189+
190+
```java
191+
class ConstructorServiceImpl implements ConstructorService {
192+
193+
@Override
194+
public void print() {
195+
System.out.println("Hello Guice By Constructor");
196+
}
197+
198+
}
199+
```
200+
201+
- 使用构造函数进行注入,代码如下
202+
203+
```java
204+
public class ConstructorApplication {
205+
206+
private ConstructorService service;
207+
208+
@Inject
209+
public ConstructorApplication(ConstructorService service) {
210+
this.service = service;
211+
}
212+
213+
public ConstructorService getService() {
214+
return service;
215+
}
216+
217+
public static void main(String[] args) {
218+
ConstructorApplication instance = Guice.createInjector().getInstance(ConstructorApplication.class);
219+
instance.getService().print();
220+
}
221+
222+
}
223+
```
224+
225+
我们运行程序,控制台会输出如下内容:
226+
227+
```base
228+
Hello Guice By Constructor
229+
```
230+
231+
232+
#### 打包文件部署
233+
234+
---
235+
236+
- 打包数据
237+
238+
```bash
239+
mvn clean package -Dmaven.test.skip=true -X
240+
```
241+
242+
运行打包后的文件即可
243+
244+
```bash
245+
java -jar target/guice-binder-1.0.0.jar
246+
```
247+
248+
#### 源码地址
249+
250+
---
251+
- [GitHub](https://github.com/qianmoQ/spring-learn-integration/tree/master/guice/binder)
252+
- [Gitee](https://gitee.com/qianmoQ/spring-learn-integration/tree/master/guice/binder)

guice/binder/README.md

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Guice依赖注入(一)
2+
3+
---
4+
5+
我们主要讲解一下Guice在日常中的基本使用,后续我们会深入讲解更多模块.
6+
7+
### Technology distribution
8+
9+
---
10+
11+
|技术|版本|
12+
|:---:|---|
13+
|Java|1.8+|
14+
|Guice|4.2.3|
15+
16+
### 贡献者(排名不分先后)
17+
18+
---
19+
20+
- [qianmoQ](https://github.com/qianmoQ)

guice/binder/pom.xml

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
6+
<parent>
7+
<artifactId>learn-integration-guice</artifactId>
8+
<groupId>com.edurt.sli.guice</groupId>
9+
<version>1.0.0</version>
10+
</parent>
11+
12+
<modelVersion>4.0.0</modelVersion>
13+
14+
<artifactId>guice-binder</artifactId>
15+
16+
<name>Guice依赖注入(一)</name>
17+
18+
<properties>
19+
<system.java.version>1.8</system.java.version>
20+
<guice.version>4.2.3</guice.version>
21+
</properties>
22+
23+
<dependencies>
24+
<dependency>
25+
<groupId>com.google.inject</groupId>
26+
<artifactId>guice</artifactId>
27+
<version>${guice.version}</version>
28+
</dependency>
29+
</dependencies>
30+
31+
<build>
32+
<plugins>
33+
<plugin>
34+
<groupId>org.apache.maven.plugins</groupId>
35+
<artifactId>maven-compiler-plugin</artifactId>
36+
<version>${plugin.maven.compiler.version}</version>
37+
<configuration>
38+
<source>${system.java.version}</source>
39+
<target>${system.java.version}</target>
40+
</configuration>
41+
</plugin>
42+
</plugins>
43+
</build>
44+
45+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.edurt.sli.guice.sample;
2+
3+
import com.google.inject.Guice;
4+
import com.google.inject.ImplementedBy;
5+
import com.google.inject.Inject;
6+
7+
public class ConstructorApplication {
8+
9+
private ConstructorService service;
10+
11+
@Inject
12+
public ConstructorApplication(ConstructorService service) {
13+
this.service = service;
14+
}
15+
16+
public ConstructorService getService() {
17+
return service;
18+
}
19+
20+
public static void main(String[] args) {
21+
ConstructorApplication instance = Guice.createInjector().getInstance(ConstructorApplication.class);
22+
instance.getService().print();
23+
}
24+
25+
}
26+
27+
@ImplementedBy(ConstructorServiceImpl.class)
28+
interface ConstructorService {
29+
30+
void print();
31+
32+
}
33+
34+
class ConstructorServiceImpl implements ConstructorService {
35+
36+
@Override
37+
public void print() {
38+
System.out.println("Hello Guice By Constructor");
39+
}
40+
41+
}

0 commit comments

Comments
 (0)