java 嵌套异常_java - @Autowired请求处理失败; 嵌套异常是java.lang.NullPointerException - 堆栈内存溢出...

我试图通过在配置类中使用Spring @Bean来解除现有Spring应用程序中的依赖项,并在使用它的类中使用@Autowired。

以下是主要配置类:

@Configuration

@ComponentScan(basePackages = {"com.example"})

@EnableWebMvc

public class DataLoadConfig extends WebMvcConfigurerAdapter {

@Bean

ActivitiesFeed activityFeed() {

HashMap temp = new HashMap();

return new ActivitiesFeed(temp);

}

...

以下是依赖项的使用方式:

public class ActivitiesLoad {

// ADDED

@Autowired

ActivitiesFeed activityFeed;

public ActivitiesLoad(String loadType, int personCode, String outputFilter, int outputNumber) {

...

// REMOVED - this approach didn't throw any errors though

// HashMap temp = new HashMap();

// ActivitiesFeed activityFeed = new ActivitiesFeed(temp);

// This dependency is now @Autowired in

feed = activityFeed.getActivities();

...

但是,我现在收到以下错误:

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/DataLoads] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause

java.lang.NullPointerException

at ac.uk.strath.t4.dataload.pure.activities.ActivitiesLoad.(ActivitiesLoad.java:66)

at ac.uk.strath.t4.dataload.controller.DataLoadController.pureActivities(DataLoadController.java:149)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

...

看到原始的初始化代码,这个运行没有任何问题,所以我知道依赖项工作,但想知道我是否已经实现了错误的注入。

顺便说一句,我不拥有ActivitiesFeed源代码,所以我不能将类似注释的@Components附加到类中,所以选择将它作为@Bean放入app配置类(DataLoadConfig)。

注意:我也尝试将ActivitiesLoad构造函数代码放入run(...)方法,只是包装它是一个问题,我试图从构造函数中访问依赖项,但它只是给了我相同的错误。 理想情况下,我宁愿将代码保留在构造函数中,因为它是别人的代码,并且不希望在此阶段破坏太多的风险:)

UPDATE

我试图添加一个@PostConstruct方法但只是同样的问题。 然后我将activityFeed属性设为私有,就像我在示例中看到的那样,但是相同。

public class ActivitiesLoad {

@Autowired

private ActivitiesFeed activityFeed;

private String loadType;

private int personCode;

private String outputFilter;

private int outputNumber;

public ActivitiesLoad(String loadType, int personCode, String outputFilter, int outputNumber) {

log.debug("Starting pure activities data load");

this.loadType = loadType;

this.personCode = personCode;

this.outputFilter = outputFilter;

this.outputNumber = outputNumber;

}

@PostConstruct

public void init() {

log.debug("Starting pure activities data load @PostConstruct");

log.debug(activityFeed); // outputs: null

...

更新2

在这里,我将依赖项从构造函数中移除,而是将其放入自己的init方法中,并在创建ActivityLoad实例后调用它。 但是,我仍然看到NullPointerException的问题。

ActivityLoad的实例化(现在使用在创建实例后调用的init方法):

...

ActivitiesLoad activitiesLoad = new ActivitiesLoad();

activitiesLoad.init(loadType, personCode, typeFilter, outputLimit);

...

这是包含新方法的ActivityLoad类

@Component

public class ActivitiesLoad {

@Autowired

private ActivitiesFeed activityFeed;

public void init(String loadType, int personCode, String outputFilter, int outputNumber) {

log.debug(activityFeed); // outputs: null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值