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

Google Guice @Singleton @Named

阅读更多

  Google Guice提供了一个名为@Singleton的注解,只要在类上加上这个注解,就可以实现一个单例类,不需要自己手动编写单例实现类。@Named注解提供了为属性赋值的功能。

 

  一。Scope

 

package com.template.juice;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-8-5
 * Time: 下午8:26
 */
public enum Scope {
    REQUEST,
    SESSION,
    GLOBAL,
    UNSCOPE
}

 

  二。Database

 

package com.template.juice;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-8-5
 * Time: 下午8:33
 */
@Singleton
public class Database {

    @Named("driverClassName")
    @Inject
    private String driverClassName;

    @Named("url")
    @Inject
    private String url;

    @Named("username")
    @Inject
    private String username;

    @Named("password")
    @Inject
    private String password;

    /**
     * Just for test and study,it does not make sense.
     */
    @Named("scope")
    @Inject
    private Scope scope;

    public String driverClassName() {
        return driverClassName;
    }

    public String url() {
        return url;
    }

    public String username() {
        return username;
    }

    public String password() {
        return password;
    }

    public Scope scope() {
        return scope;
    }
}

 

  三。DatabaseModule

 

package com.template.juice;

import com.google.inject.AbstractModule;
import com.google.inject.name.Names;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-8-5
 * Time: 下午8:38
 */
public class DatabaseModule extends AbstractModule {

    @Override
    protected void configure() {

        bind(String.class).annotatedWith(Names.named("driverClassName")).toInstance("com.mysql.jdbc.Driver");

        bind(String.class).annotatedWith(Names.named("url")).toInstance("jdbc:mysql://localhost:3306/demo");

        bind(String.class).annotatedWith(Names.named("username")).toInstance("root");

        bind(String.class).annotatedWith(Names.named("password")).toInstance("root");

        bind(Scope.class).annotatedWith(Names.named("scope")).toInstance(Scope.GLOBAL);

    }
}

 

  四。Main

 

package com.template.juice;

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-5
 * Time: 下午8:42
 */
public class Main {
    private static Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
        Module module = new DatabaseModule();
        Injector injector = Guice.createInjector(module);
        Database instance1 = injector.getInstance(Database.class);
        Database instance2 = injector.getInstance(Database.class);

        logger.info("driverClassName is " + instance1.driverClassName());
        logger.info("url is " + instance1.url());
        logger.info("username is " + instance1.username());
        logger.info("password is " + instance1.password());

        Boolean isSingleton = instance1.equals(instance2);
        logger.info(instance1.toString());
        logger.info(instance2.toString());
        logger.info(isSingleton.toString());
    }

}

 

  五。运行结果

  consoleone

 

  可以看到instance1和instance2的hashcode相同,并且两者相比为true,说明injector返回的是同一个实例。

 

  去除Database类的@Singleton注解,运行结果为

  consoletwo

 

  可以看到去除@Singleton注解后,instance1和instance2的hashcode不同,并且两者相比为false,说明instance1和instance2为不同的实例。

  • 大小: 10.5 KB
  • 大小: 10.5 KB
分享到:
评论

相关推荐

    Google guice

    此外,还有`@Singleton`用于标记单例服务,`@Named`用于为相同类型的多个绑定提供名字区分等。 ```java public class MyClass { @Inject private MyDependency myDependency; @Inject public MyClass(@Named...

    google guice 3.0源码

    还有如`@Singleton`、`@Named`等,分别表示单例模式和命名绑定。 3. **模块(Modules)**:Guice的配置是通过创建自定义的`Module`类实现的。在模块中,我们可以定义绑定(bindings),比如将接口绑定到具体的实现类...

    goole-guice所有JAR包

    Guice,全称为Google Guice,是Google推出的一款轻量级的依赖注入(Dependency Injection,简称DI)框架,专门用于简化Java应用中的对象组装和管理。依赖注入是一种设计模式,它可以帮助开发者降低代码间的耦合,...

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

    Google Guice,全称为“Google Inversion of Control Container for Java”,是Google推出的一款轻量级依赖注入框架,它旨在简化Java应用程序的构造和管理。依赖注入(Dependency Injection,DI)是一种设计模式,其...

    Guice用户指南翻译

    Guice是Google开发的一款轻量级依赖注入(DI)框架,它使得Java应用的组件管理变得简单。依赖注入是一种设计模式,它有助于降低代码间的耦合度,提高软件的可测试性和可维护性。Guice通过提供一种声明式的方式来配置...

    Guice可以匹敌Dagger的轻量级注入框架

    Guice,发音为“juice”,是由Google赞助并开源的一款轻量级的依赖注入(Dependency Injection,简称DI)框架。依赖注入是一种设计模式,它允许我们解耦代码,提高组件的可测试性和可维护性。Guice是针对Java平台的...

    guice超轻量级依赖注入

    Guice,全称为Google Guice,是一款由Google开发的轻量级依赖注入(Dependency Injection,简称DI)框架,主要用于简化Java应用的初始化和组件管理。依赖注入是一种设计模式,它可以帮助开发者解耦代码,提高软件的...

    guice入门教程helloworld篇

    Guice,全称为Google Guice,是一款轻量级的依赖注入框架,由Google开发并开源。依赖注入(Dependency Injection,DI)是一种设计模式,它帮助我们解耦代码,提高组件的可测试性和可维护性。Guice通过在运行时自动...

    guicemail.rar

    1. **注解** - Guice使用Java注解如`@Inject`,`@Singleton`,`@Named`等来标记依赖。`@Inject`用于标记构造函数、字段或方法,表示它们需要依赖注入。`@Singleton`指示Guice只创建一个实例,并在后续请求中重复使用...

    Hello-Google-Guice:第一个Google Guice项目

    **Hello-Google-Guice: Google Guice 入门教程** Google Guice 是一个轻量级的依赖注入框架,主要用于简化 Java 应用程序的构建和管理。它通过自动管理和提供对象之间的依赖关系,帮助开发者编写更加简洁、可测试...

    Guice发音为juice,是Google为Java 11及以上版本提供的轻量级依赖注入框架.zip

    Guice,发音为"juice",是由Google开发的一个轻量级依赖注入(Dependency Injection,简称DI)框架,专门针对Java 11及更高版本设计。依赖注入是一种设计模式,它帮助开发者解耦代码,使得组件之间通过接口进行通信...

    官方jar包javax-inject.jar

    6. **与其他框架的集成**:虽然`javax.inject`提供了一套基础的DI机制,但它通常与其他更完整的DI框架(如Google的Guice或Spring框架)结合使用,以获取更全面的功能,如AOP(面向切面编程)、事件处理等。...

    gbsd:GuiceBillingServiceDemo

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

    .javax.inject_1.0.0.jar

    在实际应用中,通常会配合如Spring或Google Guice这样的依赖注入框架来使用javax.inject。这些框架会扫描带有注解的类,解析其依赖,并在运行时进行注入。例如,Spring框架中的`@Autowired`注解可以与`@Inject`互换...

    GuiceDemo:吉斯·德莫(GuiceDemo)

    GuiceDemo 是一个基于 Google Guice 框架的示例项目,旨在帮助开发者理解并学习如何在实际应用中使用 Guice 进行依赖注入(Dependency Injection)。Guice 是 Google 提供的一款轻量级的 Java 模块化框架,它简化了...

Global site tag (gtag.js) - Google Analytics