1年前に考えたコードを整理しようと思った。
ここで重要なのは、bindInterceptorの使い方である。
import com.google.inject.Binder;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.matcher.Matchers;
public final class CsvparseBuilder{
private CsvparseBuilder(){}
/**
* Csvparserインスタンス生成.
* @param csvpCls Csvparser を実装したClass変数、Class<? extends Csvparser>
* @return Csvparserインスタンス
*/
public static Csvparser create(Class<? extends Csvparser> csvpCls){
Injector injector = Guice.createInjector(new _Module(csvpCls));
return injector.getInstance(csvpCls);
}
// Google guice バインド定義
static class _Module implements Module{
private Class<? extends Csvparser> csvpCls;
protected _Module(Class<? extends Csvparser> csvpCls){
this.csvpCls = csvpCls;
}
/* (非 Javadoc)
* @see com.google.inject.Module#configure(com.google.inject.Binder)
*/
public void configure(Binder binder){
binder.bindInterceptor(Matchers.inPackage(this.csvpCls.getPackage())
,InterceptMatcher.annotatedWith(Intercept.class,Csvparser.CSV_PARSE)
,new CsvparseInterceptor(this.csvpCls));
}
}
}
=================
protected void bindInterceptor(Matcher<? super Class<?>> classMatcher, Matcher<? super Method> methodMatcher, MethodInterceptor... interceptors)