日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Google Guice @Singleton @Named--4

發布時間:2024/1/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。