Google Guice 小试牛刀
Google Guice是一个轻量级Dependency Injection依赖注入框架,能够提供动态注入,即当不知道注射的这个对象注射给谁呢,需要在运行时才能得到的的这个接口的实现,这是Spring DI所不具有的,Spring DI所有配置都是写死的,并且Spring DI在应用程序启动时所有依赖注入关系都会初始好,而Google Guice则可以根据需要进行依赖注入初始化,也就是说只有当需要时,就可以对依赖注入关系进行初始化。
引入Google Guice包,从这个网址可以下载http://google-guice.googlecode.com/files/guice-3.0.zip
一。CommentDao.java
[java]
package com.template.guice;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-2
* Time: 下午9:37
*/
public interface CommentDao {
public void comment(String message);
}
[/java]
二。CommentDaoImpl.java
[java]
package com.template.guice;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-2
* Time: 下午9:38
*/
public class CommentDaoImpl implements CommentDao {
public CommentDaoImpl() {
}
@Override
public void comment(String message) {
System.out.print(message);
}
}
[/java]
三。CommentService.java
[java]
package com.template.guice;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-2
* Time: 下午9:39
*/
public interface CommentService {
public void comment();
}
[/java]
四。CommentServiceImpl.java
[java]
package com.template.guice;
import com.google.inject.Inject;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-2
* Time: 下午9:39
*/
public class CommentServiceImpl implements CommentService {
private CommentDao commentDao;
@Inject
public CommentServiceImpl(CommentDao commentDao) {
this.commentDao = commentDao;
}
@Override
public void comment() {
commentDao.comment("This is a comment message!");
}
public void setCommentDao(CommentDao commentDao) {
this.commentDao = commentDao;
}
}
[/java]
五。CommentModule.java
[java]
package com.template.guice;
import com.google.inject.AbstractModule;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-2
* Time: 下午9:46
*/
public class CommentModule extends AbstractModule {
@Override
protected void configure() {
bind(CommentDao.class).to(CommentDaoImpl.class);
}
}
[/java]
六。Main.java
[java]
package com.template.guice;
import com.google.inject.Guice;
import com.google.inject.Injector;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-2
* Time: 下午9:55
*/
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new CommentModule());
CommentService commentService = injector.getInstance(CommentServiceImpl.class);
commentService.comment();
}
}
[/java]
@Inject表示Guice会隐式调用CommentServiceImpl的构造方法,而CommentModule则表示需要将CommentDao以CommentDaoImpl来注入对象中。