`
Wind_ZhongGang
  • 浏览: 266482 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Google Guice Annotation Binding

阅读更多

    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());
    }
}

 

    八。运行结果

    annotation

  • 大小: 17.9 KB
2
5
分享到:
评论
2 楼 Wind_ZhongGang 2011-08-06  
谢谢,呵呵
1 楼 bastengao 2011-08-06  
支持下作者

相关推荐

    google-guice

    Guice的核心概念包括模块(Module)、注解(Annotation)和绑定(Binding)。模块是Guice配置的载体,它定义了哪些类将被实例化以及它们之间的依赖关系。开发者可以创建自定义模块,并通过`@Provides`注解的方法来...

    Google Guice入世(转 附带一Guice1.0的简单测试代码)

    Guice的核心组件包括模块(Module)、注解(Annotation)和绑定(Binding)。 1. **模块(Module)** 模块是Guice配置的基石,用于定义一组绑定规则。开发者可以通过实现`com.google.inject.Module`接口并重写`...

    Guice_1.0_Manual.pdf

    4. **自定义绑定**:通过实现`BindingAnnotation`或`ScopeAnnotation`来自定义绑定行为。 #### 七、单元测试与Guice Guice简化了单元测试的过程,可以通过注入模拟对象(Mock Object)来隔离被测代码,从而避免外部...

    初试Guice测试文件

    6. **多绑定(Multi-Bindings)**:Guice允许创建多态服务,如`@BindingAnnotation`可以用于多个实现绑定到同一个接口,形成集合或映射。 7. **超类型绑定(Super-Type Bindings)**:Guice支持将所有实现某个接口...

    httpz-dispatch_2.11-0.2.10-RC1-scalaz70.zip

    Guice的核心概念包括模块(Module)、绑定(Binding)和注解(Annotation)。模块定义了依赖关系,绑定将具体实现绑定到接口或抽象类,注解则用于标记需要被注入的依赖。Guice的优雅设计使得代码更加整洁,更易于...

    adapter-annotations-1.0.0-source-release.zip

    3. **处理器(Processors)**:在Java中,注解处理器是`javax.annotation.processing.Processor`接口的实现,它们在编译期间运行,可以基于源代码中的注解生成额外的代码或资源。 4. **适配器模式(Adapter Pattern...

    gbsd:GuiceBillingServiceDemo

    3. **注解(Annotation)**:Guice大量使用了Java注解,如`@Inject`用于标记依赖注入的位置,`@Singleton`表示单例模式,`@Named`用于为相同类型的不同实例提供别名等。 4. **绑定(Binding)**:Guice允许你通过`...

    Roboguice实现依赖注入

    在Android开发中,Roboguice是一款基于Google的Guice框架实现的轻量级依赖注入库,特别适合于简化Android应用程序的初始化过程。 Roboguice的核心概念是注入器(Injector),它负责管理对象的生命周期并处理依赖...

Global site tag (gtag.js) - Google Analytics