DefaultBeanFactory.java

  1. package com.gh.mygreen.xlsmapper;

  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Modifier;

  4. import com.github.mygreen.cellformatter.lang.ArgUtils;


  5. /**
  6.  * Beanのインスタンスを生成する標準のクラス。
  7.  *
  8.  * @since 1.0
  9.  * @author T.TSUCHIE
  10.  *
  11.  */
  12. public class DefaultBeanFactory implements BeanFactory<Class<?>, Object> {

  13.     @Override
  14.     public Object create(final Class<?> clazz) {

  15.         ArgUtils.notNull(clazz, "clazz");

  16.         try {
  17.             final Class<?> declaredClass = clazz.getDeclaringClass();

  18.             if(declaredClass != null && !Modifier.isStatic(clazz.getModifiers())) {
  19.                 // 非staticな内部クラスの場合
  20.                 Constructor<?> cons = clazz.getDeclaredConstructor(declaredClass);
  21.                 cons.setAccessible(true);
  22.                 return cons.newInstance((Object)null);
  23.             }

  24.             Constructor<?> cons = clazz.getDeclaredConstructor();
  25.             cons.setAccessible(true);
  26.             return cons.newInstance();
  27.         } catch (ReflectiveOperationException  e) {
  28.             throw new RuntimeException(String.format("fail create Bean instance of '%s'", clazz.getName()), e);
  29.         }
  30.     }

  31. }