1

私の現在のプロジェクトでは、このメソッドが呼び出されると:

public Collection<? extends Object> list_values() throws Exception {
    String nome = classe().getSimpleName();
    String nome_service = nome+"Service";
    String local_service = "com.spring.model."+nome;
    Class<?> clazz = Class.forName(local_service.toLowerCase()+"."+nome_service);
    Object serv = clazz.newInstance();
    Collection<? extends Object> list = (Collection<? extends Object>) serv.getClass().getMethod("lista").invoke(serv);
    return list;
}

アプリケーションは、このエラーが原因で InvocationTargetException をトリガーします。

Caused by: java.lang.NullPointerException
    at com.spring.config.generic.service.basicService.lista(basicService.java:51)

変数に格納されてbasicServiceいるクラスのスーパークラスですclazz

ここで私が間違っていることを誰かに教えてもらえますか? このクラスの新しいインスタンスを作成する正しい方法は?

ps .: basicService の 51 行目は、このメソッド内に配置されます。

@Transactional
public List<?> lista() {
    return dao.findAll();
}

メンバーdaoは次のように定義されます。

@Autowired
protected Dao<E> dao;
4

1 に答える 1

0

OK、この問題を解決するには、次のコードを使用して、ApplicationContextHolder という名前のクラスをプロジェクトに追加します。

@Component
public class ApplicationContextHolder implements ApplicationContextAware {

    private static ApplicationContext context;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }

    public static ApplicationContext getContext() {
        return context;
    }

}

関数の最終的なコードは次のlist_values(...)とおりです。

public List<?> list_values() throws Exception {
    String nome = classe().getSimpleName();
    Class<?> clazz = Class.forName("com.spring.model."+nome.toLowerCase()+"."+nome+"Service");
    Object object = clazz.newInstance();
    ApplicationContextHolder.getContext().getAutowireCapableBeanFactory().autowireBean(object);
    return (List<?>) object.getClass().getMethod("lista").invoke(object);
}
于 2014-11-03T01:03:42.810 に答える