Google Guice @Singleton @Named--4
生活随笔
收集整理的這篇文章主要介紹了
Google Guice @Singleton @Named--4
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Google Guice提供了一個名為@Singleton的注解,只要在類上加上這個注解,就可以實現一個單例類,不需要自己手動編寫單例實現類。@Named注解提供了為屬性賦值的功能。
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?? }??
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;?? ????}?? }??
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);?? ?? ????}?? }??
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());?? ????}?? ?? }??
?
一。Scope
?
Java代碼 ??
二。Database
?
Java代碼 ??
三。DatabaseModule
?
Java代碼 ??
四。Main
?
Java代碼 ??
五。運行結果
?
可以看到instance1和instance2的hashcode相同,并且兩者相比為true,說明injector返回的是同一個實例。
?
去除Database類的@Singleton注解,運行結果為
?
可以看到去除@Singleton注解后,instance1和instance2的hashcode不同,并且兩者相比為false,說明instance1和instance2為不同的實例。
總結
以上是生活随笔為你收集整理的Google Guice @Singleton @Named--4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: umi:配置式路由
- 下一篇: 《那些年啊,那些事——一个程序员的奋斗史