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());
}
}
五。运行结果
可以看到instance1和instance2的hashcode相同,并且两者相比为true,说明injector返回的是同一个实例。
去除Database类的@Singleton注解,运行结果为
可以看到去除@Singleton注解后,instance1和instance2的hashcode不同,并且两者相比为false,说明instance1和instance2为不同的实例。
- 大小: 10.5 KB
- 大小: 10.5 KB
分享到:
相关推荐
此外,还有`@Singleton`用于标记单例服务,`@Named`用于为相同类型的多个绑定提供名字区分等。 ```java public class MyClass { @Inject private MyDependency myDependency; @Inject public MyClass(@Named...
还有如`@Singleton`、`@Named`等,分别表示单例模式和命名绑定。 3. **模块(Modules)**:Guice的配置是通过创建自定义的`Module`类实现的。在模块中,我们可以定义绑定(bindings),比如将接口绑定到具体的实现类...
Guice,全称为Google Guice,是Google推出的一款轻量级的依赖注入(Dependency Injection,简称DI)框架,专门用于简化Java应用中的对象组装和管理。依赖注入是一种设计模式,它可以帮助开发者降低代码间的耦合,...
Google Guice,全称为“Google Inversion of Control Container for Java”,是Google推出的一款轻量级依赖注入框架,它旨在简化Java应用程序的构造和管理。依赖注入(Dependency Injection,DI)是一种设计模式,其...
Guice是Google开发的一款轻量级依赖注入(DI)框架,它使得Java应用的组件管理变得简单。依赖注入是一种设计模式,它有助于降低代码间的耦合度,提高软件的可测试性和可维护性。Guice通过提供一种声明式的方式来配置...
Guice,全称为Google Guice,是一款由Google开发的轻量级依赖注入(Dependency Injection,简称DI)框架,主要用于简化Java应用的初始化和组件管理。依赖注入是一种设计模式,它可以帮助开发者解耦代码,提高软件的...
Guice,全称为Google Guice,是一款轻量级的依赖注入框架,由Google开发并开源。依赖注入(Dependency Injection,DI)是一种设计模式,它帮助我们解耦代码,提高组件的可测试性和可维护性。Guice通过在运行时自动...
Guice,发音为“juice”,是由Google赞助并开源的一款轻量级的依赖注入(Dependency Injection,简称DI)框架。依赖注入是一种设计模式,它允许我们解耦代码,提高组件的可测试性和可维护性。Guice是针对Java平台的...
- **作用域**:Guice支持不同的作用域,如`@Singleton`表示在整个应用程序生命周期中只创建一次实例。 #### 六、Web应用开发与Guice Guice不仅可以应用于普通的Java应用程序中,还可以很好地与流行的Web框架如...
1. **注解** - Guice使用Java注解如`@Inject`,`@Singleton`,`@Named`等来标记依赖。`@Inject`用于标记构造函数、字段或方法,表示它们需要依赖注入。`@Singleton`指示Guice只创建一个实例,并在后续请求中重复使用...
**Hello-Google-Guice: Google Guice 入门教程** Google Guice 是一个轻量级的依赖注入框架,主要用于简化 Java 应用程序的构建和管理。它通过自动管理和提供对象之间的依赖关系,帮助开发者编写更加简洁、可测试...
Guice,发音为"juice",是由Google开发的一个轻量级依赖注入(Dependency Injection,简称DI)框架,专门针对Java 11及更高版本设计。依赖注入是一种设计模式,它帮助开发者解耦代码,使得组件之间通过接口进行通信...
6. **与其他框架的集成**:虽然`javax.inject`提供了一套基础的DI机制,但它通常与其他更完整的DI框架(如Google的Guice或Spring框架)结合使用,以获取更全面的功能,如AOP(面向切面编程)、事件处理等。...
3. **注解(Annotation)**:Guice大量使用了Java注解,如`@Inject`用于标记依赖注入的位置,`@Singleton`表示单例模式,`@Named`用于为相同类型的不同实例提供别名等。 4. **绑定(Binding)**:Guice允许你通过`...
在实际应用中,通常会配合如Spring或Google Guice这样的依赖注入框架来使用javax.inject。这些框架会扫描带有注解的类,解析其依赖,并在运行时进行注入。例如,Spring框架中的`@Autowired`注解可以与`@Inject`互换...
GuiceDemo 是一个基于 Google Guice 框架的示例项目,旨在帮助开发者理解并学习如何在实际应用中使用 Guice 进行依赖注入(Dependency Injection)。Guice 是 Google 提供的一款轻量级的 Java 模块化框架,它简化了...