网上已经有很多个Guice的例子了...随便贴贴
定义一个接口:
/**
*
*/
package test2;
import com.google.inject.ImplementedBy;
/**
* @author sun.zhang
* @Date 2008-4-18
* @Email myzeer@gmail.com
*
*/
//@ImplementedBy(MockService.class)
public interface Service {
public void sayHello();
}
接口实现类:
/**
*
*/
package test2;
/**
* @author sun.zhang
* @Date 2008-4-18
* @Email myzeer@gmail.com
*
*/
public class ServiceImp implements Service{
public void sayHello() {
System.out.println("Hello World ...");
}
}
模块绑定配置类:
/**
*
*/
package test2;
import com.google.inject.Binder;
import com.google.inject.Module;
/**
* @author sun.zhang
* @Date 2008-4-18
* @Email myzeer@gmail.com
*
*/
public class TestModule implements Module {
/* (non-Javadoc)
* @see com.google.inject.Module#configure(com.google.inject.Binder)
*/
public void configure(Binder binder) {
binder.bind(Service.class).to(ServiceImp.class);
}
}
客户端类:
/**
*
*/
package test2;
import com.google.inject.Inject;
/**
* @author sun.zhang
* @Date 2008-4-18
* @Email myzeer@gmail.com
*
*/
public class Client {
private Service service;
public Client(){}
@Inject //依赖注入必须的标注
public Client (Service service){
System.out.println("This is constructor injector...");
this.service = service;
}
// 第二种,set注入方式
// @Inject
// public void setClient(Service service){
// System.out.println("This is set injector...");
// this.service = service;
// }
public void sayHello(){
service.sayHello();
}
}
主函数:
/**
*
*/
package test2;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
/**
* @author sun.zhang
* @Date 2008-4-18
* @Email myzeer@gmail.com
*
*/
public class GuiceMain {
public static void main(String[] args) {
Service service = new ServiceImp();
// Service service = new MockService(); // 第二个service的实现
Client client = new Client(service); //构造器注入
Module module = new TestModule();
Injector injector = Guice.createInjector(module);//向Guice要注射器
injector.injectMembers(client);
client.sayHello();
}
}
说明:
如果当Client.class中使用两次@inject标签,那么Guice将会自动注入两次。如:
@Inject //依赖注入必须的标注
public Client (Service service){
System.out.println("This is constructor injector...");
this.service = service;
}
@Inject
public void setClient(Service service){
System.out.println("This is set injector...");
this.service = service;
}
虽然本意并不是注入两次,只是想提供两个注入方法而已……
分享到:
相关推荐
"Guice 中文文档 例子" 包含了 Guice 的中文文档和实际操作示例,这对于学习 Guice 非常有帮助。文档可能涵盖了以下内容: 1. **基础概念介绍**: 解释依赖注入的概念和 Guice 的基本工作原理。 2. **模块配置**: ...
采用的框架是struts2.1.8,ibatis3,guice2.0,完整的产品模块和权限模块(部分功能)例子。这是smeite.com商城第一版本的部分代码,测试通过。 希望给需要的朋友一个借鉴。 自我认为是学习Ibatis3比较好的例子,覆盖...
在上述例子中,`MyTest`使用Guice创建了一个`Injector`,然后在`setUp()`方法中注入了`MyService`的实例。`MyModule`定义了`MyService`的绑定规则,即使用`MyServiceImpl`作为其实现。 5. **实际应用** Guice适用...
**标题:“初试Guice(转)”,描述:“demo 很好的例子,博文链接:https://phantom.iteye.com/blog/92183”** 这篇文章提到了Guice,这是...学习和理解Guice的使用,对于任何Java开发者来说都是提高生产力的重要步骤。
在Java世界中,JSR 330(Java标准版330)是一个重要的依赖注入(Dependency Injection,简称DI)规范,它定义了标准的注解来管理对象的生命...研究源码,尤其是例子和测试用例,能加深对这一高级依赖注入技术的理解。
无论使用哪种传输方式,都可以使用相同的API进行工作,因此只需学习一次API,就可以与所有内置的组件进行交互。 Apache Camel提供了对Bean绑定的支持,并且与Spring、Blueprint和Guice等流行框架无缝集成。它还广泛...
1. **第一个例子**:通过一个简单的例子来了解 Xtext 语法的基本结构。 2. **语法** - **语言声明**:定义 DSL 的名称和版本。 - **EPackage 声明**:声明 EPackage 以便于与其他 EMF 模型交互。 - **规则**:...
1. **ActiveMQ Camel Tomcat 示例**:此示例展示了如何在运行于Apache Tomcat的应用程序中嵌入Apache ActiveMQ和Camel,提供了一个将消息系统与Web应用结合的例子。 2. **Aggregate 示例**:展示的是Camel 2.3中的...
- **第一个例子**:通过一个简单的例子介绍如何使用Xtext的语法语言定义基本的语法规则。 - **语法**:详细介绍了Xtext语法语言的各个组成部分及其作用。 - **语言声明**:定义语言的基本信息。 - **EPackage声明*...
Roboguice是一款针对Android平台的轻量级依赖注入库,基于Google的Guice框架进行构建,它通过注解的方式来简化对象之间的依赖关系。 首先,我们需要理解依赖注入的基本概念。在传统的编程中,对象通常会直接创建...
通过分析`todolist`目录下的源代码,我们可以学习到如何在Play Framework 2.0中创建一个简单应用,包括如何处理HTTP请求,如何定义模型和视图,以及如何使用数据库。这个教程为初学者提供了一个很好的起点,让他们...
为了更好地理解Xtext的语法语言,本节提供了一个简单的例子。通过这个例子,读者可以了解语法的基本结构和特点。 **3.2 语法** **3.2.1 语言声明** 每个Xtext语法文件都以`grammar`关键字开头,后面跟上语言的...
通过一个简单的例子介绍Xtext语法语言的基本用法,包括语言声明、EPackage声明、规则定义等。 #### 4.2 语法 详细解释Xtext语法语言的构成,包括语言声明、EPackage声明、规则、解析器规则、数据类型规则、枚举...
虽然有许多成熟的IOC容器,如Spring、Guice等,但理解其原理并自定义实现有助于深入学习。自定义IOC主要包括以下几个步骤: 1. **创建Bean仓库**:用于存储所有的Bean定义,包括类名、构造函数、依赖关系等信息。 2....
在这个例子中,Subject并不直接与数据库交互,而是通过`shiro.ini`文件获取其认证和授权信息。 2. **Realms**: Realms是Shiro获取认证和授权信息的接口。在无数据库的环境中,我们创建一个 IniRealm 实例,它从`...
在这个例子中,`GzipResponseWrapper`是一个自定义的响应包装器,负责实际的压缩工作。它会在`finish`方法中完成压缩并写入到原始的HttpServletResponse中。 压缩HTML文件不仅可以减少带宽使用,还可以帮助应对慢速...
3. **接口注入**:虽然在Java中不常见,但某些框架如Guice支持这种注入方式,通过实现特定的接口来接收依赖。 在Java生态系统中,Spring框架是最著名的依赖注入库。Spring提供了多种注入方式,并且还具有AOP(面向...
在"play-simple"的这个例子中,可能是通过构造函数或者静态工厂方法来实例化和注入所需的依赖。 另一方面,HTTP基本身份验证是一种常见的Web安全机制,用于验证客户端(通常是浏览器)向服务器发送请求时的身份。在...
在这个例子中,视图可能包括了灯泡的图标、开关按钮和亮度滑动条等UI元素,用于展示和控制灯泡的状态。 6. **ViewModel**: 视图模型是连接模型和视图的纽带,它提供数据绑定和命令功能,使得视图的改变能驱动模型...