Google Guice提供Annotation Binding,可以使用注解来对依赖进行绑定并同时进行赋值。
一。@DriverClassName
package com.template.guice;
import com.google.inject.BindingAnnotation;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-6
* Time: 下午3:23
*/
@BindingAnnotation
@Target({ METHOD, CONSTRUCTOR, FIELD })
@Retention(RUNTIME)
public @interface DriverClassName {
}
二。@Username
package com.template.guice;
import com.google.inject.BindingAnnotation;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-6
* Time: 下午3:23
*/
@BindingAnnotation
@Target({ METHOD, CONSTRUCTOR, FIELD })
@Retention(RUNTIME)
public @interface Username {
}
三。@Url
package com.template.guice;
import com.google.inject.BindingAnnotation;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-6
* Time: 下午3:23
*/
@BindingAnnotation
@Target({ METHOD, CONSTRUCTOR, FIELD })
@Retention(RUNTIME)
public @interface Url {
}
四。@Password
package com.template.guice;
import com.google.inject.BindingAnnotation;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-6
* Time: 下午3:23
*/
@BindingAnnotation
@Target({ METHOD, CONSTRUCTOR, FIELD })
@Retention(RUNTIME)
public @interface Password {
}
五。DBConnection
package com.template.guice;
import com.google.inject.Inject;
import com.google.inject.Singleton;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-6
* Time: 下午3:28
*/
@Singleton
public class Connection {
@Inject
@DriverClassName
private String driverClassName;
@Inject
@Url
private String url;
@Inject
@Username
private String username;
@Inject
@Password
private String password;
public String driverClassName() {
return driverClassName;
}
public String url() {
return url;
}
public String username() {
return username;
}
public String password() {
return password;
}
}
六。ConnectionModule
package com.template.guice;
import com.google.inject.Binder;
import com.google.inject.Module;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-6
* Time: 下午3:32
*/
public class ConnectionModule implements Module {
@Override
public void configure(Binder binder) {
binder.bind(String.class).annotatedWith(DriverClassName.class).toInstance("com.mysql.jdbc.Driver");
binder.bind(String.class).annotatedWith(Url.class).toInstance("jdbc:mysql://localhost:3306/demo");
binder.bind(String.class).annotatedWith(Username.class).toInstance("root");
binder.bind(String.class).annotatedWith(Password.class).toInstance("root");
}
}
七。Main
package com.template.guice;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-6
* Time: 下午3:36
*/
public class Main {
public static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
Module module = new ConnectionModule();
Injector injector = Guice.createInjector(module);
Connection instance1 = injector.getInstance(Connection.class);
Connection instance2 = injector.getInstance(Connection.class);
logger.info("instance1 is " + instance1);
logger.info("instance2 is " + instance2);
logger.info("instance1's hashcode is " + instance1.hashCode());
logger.info("instance2's hashcode is " + instance2.hashCode());
logger.info("driverClassName is " + instance1.driverClassName());
logger.info("url is " + instance1.url());
logger.info("username is " + instance1.username());
logger.info("password is " + instance1.password());
}
}
八。运行结果


- 大小: 17.9 KB
分享到:
相关推荐
Guice的核心概念包括模块(Module)、注解(Annotation)和绑定(Binding)。模块是Guice配置的载体,它定义了哪些类将被实例化以及它们之间的依赖关系。开发者可以创建自定义模块,并通过`@Provides`注解的方法来...
Guice的核心组件包括模块(Module)、注解(Annotation)和绑定(Binding)。 1. **模块(Module)** 模块是Guice配置的基石,用于定义一组绑定规则。开发者可以通过实现`com.google.inject.Module`接口并重写`...
4. **自定义绑定**:通过实现`BindingAnnotation`或`ScopeAnnotation`来自定义绑定行为。 #### 七、单元测试与Guice Guice简化了单元测试的过程,可以通过注入模拟对象(Mock Object)来隔离被测代码,从而避免外部...
6. **多绑定(Multi-Bindings)**:Guice允许创建多态服务,如`@BindingAnnotation`可以用于多个实现绑定到同一个接口,形成集合或映射。 7. **超类型绑定(Super-Type Bindings)**:Guice支持将所有实现某个接口...
Guice的核心概念包括模块(Module)、绑定(Binding)和注解(Annotation)。模块定义了依赖关系,绑定将具体实现绑定到接口或抽象类,注解则用于标记需要被注入的依赖。Guice的优雅设计使得代码更加整洁,更易于...
3. **处理器(Processors)**:在Java中,注解处理器是`javax.annotation.processing.Processor`接口的实现,它们在编译期间运行,可以基于源代码中的注解生成额外的代码或资源。 4. **适配器模式(Adapter Pattern...
3. **注解(Annotation)**:Guice大量使用了Java注解,如`@Inject`用于标记依赖注入的位置,`@Singleton`表示单例模式,`@Named`用于为相同类型的不同实例提供别名等。 4. **绑定(Binding)**:Guice允许你通过`...
在Android开发中,Roboguice是一款基于Google的Guice框架实现的轻量级依赖注入库,特别适合于简化Android应用程序的初始化过程。 Roboguice的核心概念是注入器(Injector),它负责管理对象的生命周期并处理依赖...