CometHashMapのつづき

先日書いたCometHashMap には、ひと工夫を埋め込みがある。
new 演算子による生成だけでなく Google guice でインジェクト生成できるようにしてある。

CometHashMapのコンストラクタを次のようにしている。
@Inject
public CometHashMap(@CometLiveScorp long checkTime,CometMapper mapper){

これは、以下のように、CometLiveScorp と AbstractModule 継承で成立する。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.google.inject.BindingAnnotation;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD,ElementType.PARAMETER})
@BindingAnnotation
@interface CometLiveScorp{
}

---------------------------------------------
import com.google.inject.AbstractModule;
/**
 * CometHashMap バインド定義モジュール.
 */

public final class CometHashMapModule extends AbstractModule{
   private long ticketTime;
   private Class<? extends CometMapper> mappercls;
   /**
    * コンストラクタ
    * @param ticketTime クリアする間隔 msec
    * @param mappercls Class<? extends CometMapper>任意の処理
    */

   public CometHashMapModule(long ticketTime,Class<? extends CometMapper> mappercls){
      this.ticketTime = ticketTime;
      this.mappercls = mappercls;
   }
   /*
    * @see com.google.inject.AbstractModule#configure()
    */

   @Override
   protected void configure(){
      binder().bind(long.class).annotatedWith(CometLiveScorp.class).toInstance(this.ticketTime);
      binder().bind(CometMapper.class).to(this.mappercls);
   }

}
--------------------------------------------------------
 public class Sample{
     @Inject private CometHashMap<String,Integer> map;
       :
 }
のようなクラス生成で、以下のように使用する。
Injector injector = Guice.createInjector(
   new CometHashMapModule(10000L,CometMapperImpl.class)
 );
Sample s = injector.getInstance(Sample.class);