`

[java]guice使用初探:取代工厂模式返回单例

 
阅读更多

额 标题 "guice使用初探:取代工厂模式返回单例 " 似乎取得不太对 这边要取代的是利用工厂模式返回 单例(好像说法没变吗喂....)

分类还是放在编程语言里了..话说企业架构里用guice本菜鸟真的没见过啊(本菜鸟除了SSH SSM 好像没见过其他的了 跪Orz..)

 

好了 废话说到这(下面也许还会有..) 

 

需要的jar包:

guice下载地址:

https://code.google.com/p/google-guice/

 

这里使用guice的DI(依赖注入)完成IoC(控制反转) 将数据库相关对象注入给DAO的属性(Field)

 

要注入的类是:

ConnectionUtil

注入的DAO是:

AccountDao

 

步奏:

首先建立一个类继承Guice的相关抽象类 来充当注入的提供者:

代码1:

package org.cc.mongo.infrustructure.di;

import java.net.UnknownHostException;

import javax.inject.Singleton;

import org.cc.mongo.infrustructure.ConnectionUtil;

import com.google.inject.AbstractModule;
import com.google.inject.Provides;

public class ConnectionUtilModule extends AbstractModule {

	@Override
	protected void configure() {
                            // 这里可以写绑定关系 将接口与实现类绑定 注入给接口绑定的实现类使用bind(实现类).to(接口)
	}
	
	  @Provides    //提供者标记
	  @Singleton  //表示是单例 util只会被初始化一次
	  ConnectionUtil provideAgentFinder() //返回注入器需要的类型
	   {
	      /**创建util并返回具体值*/
		  ConnectionUtil util = new ConnectionUtil(); 
	      try {
			util.configure().connect();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
	      return util;
	   }
	
	

}

 

接下去在AccountDao中注入:

代码2:

public class AccountDao extends BaseDao {

	public static final String COLLECTION_NAME="account";
	
	private ConnectionUtil conn;
	
	private DBCollection collection;
	
	@Inject
	public AccountDao(ConnectionUtil conn) throws UnknownHostException {
		super();
		this.conn=conn;
		this.collection=conn.getCollection(COLLECTION_NAME);
	}
... ...
}

 

然后测试是这样的:

代码3:

	@Test
	public void test() {
		Injector injector = Guice.createInjector(new ConnectionUtilModule());
		AccountDao ad = injector
				.getInstance(AccountDao.class);
		Account acc = new Account();
		acc.setName("x15");
		acc.setInfo("empty");
		acc.setPassword("23456");
		ad.add(acc);
		
		AccountDao ad2 = injector
				.getInstance(AccountDao.class); //检查ConnectionUtil对象是否是单例
		
		acc.setName("x16");
		acc.setInfo("empty");
		acc.setPassword("23456");
		ad2.add(acc);
	}

 然后运行这个测试 查看结果:

2013-08-15 00:24:38:560 INFO [main] org.cc.mongo.infrustructure.ConnectionUtil - mongo初始化成功..
2013-08-15 00:24:38:567 INFO [main] org.cc.mongo.infrustructure.ConnectionUtil - Connect()成功

 可见只connect()了一次 (每进行一次连接就会输出一次)

为了再看得清楚一点 把代码1中的@Singleton标记去除 再运行一次测试(以上的数据也要做调整 因为我在name里建了一个唯一索引 不然会出错):

2013-08-15 00:56:37:341 INFO [main] org.cc.mongo.infrustructure.ConnectionUtil - mongo初始化成功..
2013-08-15 00:56:37:347 INFO [main] org.cc.mongo.infrustructure.ConnectionUtil - Connect()成功
2013-08-15 00:56:37:416 INFO [main] org.cc.mongo.infrustructure.ConnectionUtil - mongo初始化成功..
2013-08-15 00:56:37:416 INFO [main] org.cc.mongo.infrustructure.ConnectionUtil - Connect()成功

 发现连接了两次 说明前面的的确是单例

 

这里总结一下一些使用到的annotation(JSR-330):

  • @Inject:和@Resource用处相近 注入对象使用 可以用在构造方法 setter以及属性上
  • @Provides:AbstractModule中使用(可以写多个 还可以不用这个注解 实现Provider接口) 表示提供者
  •  @Singleton:和@Provides一起使用表示提供者提供的是单例 

这只是guice的简单使用 更多使用各位有需求的话可以自己去找一找^_^

1
3
分享到:
评论

相关推荐

    guice-4.0-API文档-中文版.zip

    Maven坐标:com.google.inject:guice:4.0; 标签:google、inject、guice、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    guice-assistedinject-3.0-API文档-中文版.zip

    标签:extensions、google、assistedinject、inject、guice、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...

    sisu-guice-2.1.7-noaop.jar

    sisu-guice-2.1.7-noaop.jar

    Java on Guice

    ### Java on Guice:深入理解依赖注入 #### 核心概念与价值 “Java on Guice”这篇文档探讨了依赖注入(Dependency Injection, DI)在Java应用中的实践方式及其带来的诸多好处。它由Google的Bob Lee和Kevin ...

    dropwizard-guice-governator:使用带有 dropwizard-guice 的调节器来避免

    当您在注入 dropwizard 配置或环境的类上有一个 guice 单例时,就会发生这种情况。 为避免这种情况,您可以: 将 guice 阶段设置为“DEVELOPMENT”,但所有内容都会以惰性模式加载 使用这样的包

    guice-multibindings-3.0-API文档-中文版.zip

    标签:google、inject、extensions、guice、multibindings、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变...

    java guice dependency injection tutorial

    它极大地简化了开发过程中的工厂模式编写工作,提高了代码的可测试性和模块化程度。 #### 使用 Guice 的优势 - **提高可维护性**:通过依赖注入,代码可以更容易地进行重构和扩展。 - **增强可测试性**:依赖注入...

    Java guice3.0轻量级的依赖注入框架 组件

    Java Guice 3.0是一款轻量级的依赖注入(Dependency Injection, DI)框架,它致力于简化Java应用程序的构建过程,让组件之间的依赖关系更加清晰和易于管理。依赖注入是一种设计模式,它允许代码在运行时自动管理和...

    guice-multibindings-3.0-API文档-中英对照版.zip

    标签:google、inject、extensions、guice、multibindings、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...

    sisu-guice-3.1.3-no_aop.jar

    sisu-guice-3.1.3-no_aop.jar

    guice-jersey:Guice模块,用于使用Jersey启动基于Jetty的休息服务器

    如果您使用Guice作为依赖项注入框架,并且想将自己的类注入到您创建的JAX-RS类中(例如“资源”和“过滤器”),则需要弥合这两个DI框架之间的鸿沟。 该模块旨在通过启动基于Jetty的Jersey服务器并初始化HK2与Guice...

    java-guice-websocket:使用 Java Websocket、Guice 和 Angular 的示例项目

    #Intro 这是一个使用 Guice 评估 Java Websockets 使用情况的示例项目。 AngularJS 用于浏览器端的东西。 ##Usage 在进行任何操作之前,您应该在文件夹 angularjs-client/app 中运行bower install 。 该项目使用...

    Google Guice: Agile Lightweight Dependency Injection Framework

    《Google Guice: Agile Lightweight Dependency Injection Framework》这本书不仅是一本关于Guice的技术指南,更是为专业Java开发者提供的宝贵资源。通过本书的学习,读者不仅能够掌握Guice的强大功能,还能深刻理解...

    java8集合源码-guice-doc:guice文档

    java8集合源码动机.md 动机 将所有内容连接在一起是应用程序开发的乏味部分。 有几种方法可以将数据、服务和表示类相互连接起来。 为了对比这些方法,我们将为披萨订购网站编写计费代码: public interface ...

    Java on Guice - Developer Day Slides.pdf

    本演示文稿通过对比工厂模式、手动依赖注入以及Guice框架下的依赖注入方式,展示了依赖注入的重要性和Guice带来的便利。通过采用Guice进行依赖注入,可以有效提高代码质量,降低维护成本,并增强系统的可测试性和...

    Robojuice jar 包文件下载(内含guice-2.0-no_aop.jar 和roboguice-1.1.2.jar )

    `guice-2.0-no_aop.jar`是Guice的一个版本,不包含Aspect Oriented Programming(AOP)支持,这可能是因为在Android环境中,AOP的使用可能会增加复杂性和性能开销。 接下来,我们来看RoboGuice。RoboGuice是Guice的...

    guice-servlet-4.0-API文档-中文版.zip

    标签:google、inject、extensions、guice、servlet、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释...

    guice超轻量级依赖注入

    2. **注解驱动**:Guice使用Java的注解来标记接口和实现,如`@Inject`用于标记构造函数、字段或方法,表示需要依赖注入。`@Singleton`表示该对象为单例,`@Named`用于指定特定的依赖实现。 3. **模块(Modules)**...

    play-guice-mybatis:play 框架 guice mybatis 集成

    本话题主要探讨的是如何在Play框架中集成Guice依赖注入框架和MyBatis持久层框架,从而构建一个强大的Java web应用程序。Play框架是一个轻量级、基于Actor模型的web应用框架,而Guice则是Google提供的一个轻量级依赖...

    guice-servlet-4.0-API文档-中英对照版.zip

    标签:google、inject、extensions、guice、servlet、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,...

Global site tag (gtag.js) - Google Analytics