
nablarch.integration.doma.DomaDaoRepository Maven / Gradle / Ivy
package nablarch.integration.doma;
import java.util.Map;
import java.util.WeakHashMap;
import nablarch.core.util.annotation.Published;
/**
* Domaで使用するDaoの実装クラスを生成・保持するクラス。
*
* @author Naoki Yamamoto
*/
@Published
public final class DomaDaoRepository {
/** Dao実装クラスのインスタンスを保持するMap */
private static final Map, Object> DAO_IMPL_MAP = new WeakHashMap<>();
/** 隠蔽コンストラクタ */
private DomaDaoRepository() {}
/**
* 指定されたDaoインタフェースの実装クラスを取得する。
*
* @param daoClass Daoインタフェースの{@link Class}
* @param Daoインタフェース
* @return Dao実装クラス
*/
@SuppressWarnings("unchecked")
public static synchronized T get(final Class daoClass) {
return (T) DAO_IMPL_MAP.computeIfAbsent(daoClass, DomaDaoRepository::createInstance);
}
/**
* 指定されたDaoインタフェースの実装クラスを生成する。
*
* @param daoClass Daoインタフェースの{@link Class}
* @param Daoインタフェース
* @return Dao実装クラス
*/
@SuppressWarnings("unchecked")
private static T createInstance(final Class daoClass) {
final String implClassName = daoClass.getName() + "Impl";
try {
final Class implClass = (Class) Thread.currentThread().getContextClassLoader().loadClass(implClassName);
return implClass.getConstructor().newInstance();
} catch (Exception e) {
throw new IllegalArgumentException("implementation class is undefined. class name = [" + daoClass.getName() + ']', e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy