欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Google Guice @Singleton @Named--4

发布时间:2024/1/18 编程问答 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Google Guice @Singleton @Named--4 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
Google Guice提供了一个名为@Singleton的注解,只要在类上加上这个注解,就可以实现一个单例类,不需要自己手动编写单例实现类。@Named注解提供了为属性赋值的功能。

 

  一。Scope

 

Java代码  
  • 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

     

    Java代码  
  • 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

     

    Java代码  
  • 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

     

    Java代码  
  • 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为不同的实例。

    总结

    以上是生活随笔为你收集整理的Google Guice @Singleton @Named--4的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。