java - IncationTargetException 尝试创建服务类的新实例

标签 java spring reflection invocationtargetexception

在我当前的项目中,调用此方法时:

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;
}

应用程序触发了由以下错误引起的 InitationTargetException:

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

其中 basicService 是存储在变量 clazz 中的类的父类(super class)。

谁能告诉我我在这里做错了什么?创建此类的新实例的正确方法是什么?

ps.:basicService中的第51行放在这个方法里面:

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

并且成员dao是这样定义的:

@Autowired
protected Dao<E> dao;

最佳答案

好的,我解决了这个问题,在我的项目中添加了一个名为 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);
}

关于java - IncationTargetException 尝试创建服务类的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26699753/

相关文章:

java - eclipse中的构建过程

java - 避免 instanceof 和 cast,一个 Super Class 可以知道 children 类吗?

spring - 使用 JerseyTest、Maven 和 TestNG 测试 Jersey-Spring 集成

java - 自定义 Controller 中的 Spring REST 响应不同

spring - 无法使用 Spring Boot thymeleaf 加载图像

java - 在 Android 中使用反射实现向后兼容

java - 如何在Linux中安装Hammurapi来查看Java源代码

java - Struts 1 如何设置复选框默认选中

使用反射的 C# 通用 Excel 导出器

C# 反射 : Get info for all members of class and base classes