我是新來的spring並在上下文初始化期間看到NullPointerException。以下是錯誤味精:Java-Spring:上下文初始化期間的NullPointerException(使用@Component,@Autowired,上下文:組件掃描)
10:23:43,231 WARN [ClassPathXmlApplicationContext] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'RoxourProcessor' defined in file [C:\my_sand\branch\Roxour-client-api\target\classes\company\online\Roxour\api\batchOperations\RoxourProcessor.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [company.online.Roxour.api.batchOperations.RoxourProcessor]: Constructor threw exception; nested exception is java.lang.NullPointerException
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'RoxourProcessor' defined in file [C:\my_sand\branch\Roxour-client-api\target\classes\company\online\Roxour\api\operation\RoxourProcessor.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [company.online.Roxour.api.batchOperations.RoxourProcessor]: Constructor threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at company.online.Roxour.api.RoxourMasterProcessor.main(RoxourMasterProcessor.java:170)
在這裏,在我的context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">
<!-- Scans within the base package of the application for @Components to configure as beans -->
<context:component-scan base-package="org.online.Roxour.api"/>
這裏是主類:
package org.online.Roxour.api;
public class RoxourMasterProcessor
{
......
@Autowired
RoxourProcessor processor;
........
public void process()
{
.......
processor.runJob();
...........
}
public static void main(String args[])
{
ApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
LOG.info("Context: " + context);
RoxourMasterProcessor master = context.getBean(RoxourMasterProcessor.class);
master.process();
}
}
在一個子包org.online.Roxour.api.utils中,我有ApplicationEnvironment和RoxourUtil類。像:
package org.online.Roxour.api.utils;
@Component
public class ApplicationEnvironment
{
public ApplicationEnvironment()
{
Properties properties = new Properties();
try
{
LOG.info("Initiating Application Environment");
properties.load(this.getClass().getClassLoader().getResourceAsStream("application.properties"));
load(properties);
}
catch (Throwable e)
{
String msg = "Error loading environment config.";
LOG.error(msg,e);
System.exit(1);
}
}
}
和
package org.online.Roxour.api.utils;
@Component
@Scope("prototype")
public class RoxourUtil
{
........
@Autowired
ApplicationEnvironment applicationEnvironment;
.........
}
在另一個分裝org.online.Roxour.api.operation,我有類RoxourProcessor:
package org.online.Roxour.api.operation;
@Component
@Scope("singleton")
public class RoxourProcessor
{
.........
private int PAYLOAD_SIZE;
private int MAX_READER_THREADS;
private int MAX_WORKER_THREADS;
@Autowired
ApplicationEnvironment applicationEnvironment;
@Autowired
RoxourUtil util;
public RoxourProcessor()
{
PAYLOAD_SIZE = applicationEnvironment.getPayloadSize();
MAX_READER_THREADS = applicationEnvironment.getMaxReaderThreads();
MAX_WORKER_THREADS = applicationEnvironment.getMaxWorkerThreads();
}
..............
}
在上下文初始化,我看到:
@Autowired
ApplicationEnvironment applicationEnvironment;
@Autowired
RoxourUtil util;
爲空。因此從RoxourProcessor構造函數獲取NULLPointerException。
但不理解它如何找不到那些2 autowired。我錯過了什麼?
任何幫助表示讚賞。
謝謝
非常感謝。有效 – Patty