Spring @Autowired字段返回null

时间:2014-01-03 13:54:12

标签: java spring

我正在尝试在Tomcat上运行Spring 3 + Struts 2 + Hibernate Web应用程序,但它无法以自动装配字段的NullPointerException启动。 我检查了其他类似的问题,但无法解决我的问题。我是Spring和Struts的新手。

MVC-调度-servlet.xml中

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
                    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">

    <context:component-scan base-package="com.se.pl.prm.controller" />

    <mvc:annotation-driven />

    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/pages/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

</beans>

的applicationContext.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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
        http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"
    default-autowire="byName">

    <context:component-scan base-package="com.se.pl">
        <context:include-filter type="regex"
            expression="(service|dao|util)\..*" />
    </context:component-scan>
    <bean id="adminProps" name="adminProps"
        class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="location" value="classpath:admin.properties">

     

错误

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'corelationDataServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.se.pl.util.PropUtil com.se.pl.service.CorelationDataServiceImpl.propUtil; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'propUtil' defined in file [C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\admin\WEB-INF\classes\com\se\pl\util\PropUtil.class]: Invocation of init method failed; nested exception is java.lang.NullPointerException
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:605)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:976)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1653)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

CorelationDataServiceImpl.java

package com.se.pl.service;

@Service
public class CorelationDataServiceImpl implements ICorelationDataService {

    @Autowired
    PropUtil propUtil;
    @Autowired
    CommonUtil commonUtil;
    @Autowired
    ICorelationDataDAO corelationDataDAO;
    @Autowired
    IReferenceDataDAO referenceDataDAO;

pom.xml (春天 - *)

<spring.version>3.1.3.RELEASE</spring.version>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>3.6.0.Final</version>
        </dependency>

    <!-- Spring + Quartz dependencies -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>   

PropUtil.java

  package com.se.pl.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.se.pl.constants.PLConstants;

@Component
public class PropUtil implements InitializingBean { 

    @Autowired
    private Properties plProps;
    @Autowired
    private Properties adminProps;
    private static List<String> pColLst = new ArrayList<String>();
    private static List<String> pRefColLst = new ArrayList<String>();
    private static List<String> dpColLst = new ArrayList<String>();
    private static List<String> lColLst = new ArrayList<String>();
    private static List<String> pCorelColLst = new ArrayList<String>();
    private static String adminUserName = null;
    private static String adminPassword = null; 
    private static String userUserName = null;
    private static String userPassword = null;
    private static String desktopUrl = "";
    private static String mobileUrl = "";
    private static String mobileUsUrl = "";

    public List<String> getPartnerColumnNames()
    {
        return pColLst;
    }

    public List<String> getPartnerReferenceColumnNames()
    {
        return pRefColLst;
    }

    public List<String> getDefaultPointsColumnNames()
    {
        return dpColLst;
    }

    public List<String> getTranslationColumnNames()
    {
        return lColLst;
    }

    public List<String> getPartnerCorelColumnNames()
    {
        return pCorelColLst;
    }

    public String getDesktopUrl()
    {
        return desktopUrl;
    }

    public String getMobileUrl()
    {
        return mobileUrl;
    }

    public String getMobileUsUrl()
    {
        return mobileUsUrl;
    }   
    public String getAdminUserName()
    {
        return adminUserName;
    }
    public String getAdminPassword()
    {
        return adminPassword;
    }
    public String getUserUserName()
    {
        return userUserName;
    }
    public String getUserPassword()
    {
        return userPassword;
    }
    public void afterPropertiesSet() throws Exception {
        String pColNames =  adminProps.getProperty("pl.excel.columns.partners");
        String pRefColNames =  adminProps.getProperty("pl.excel.columns.partnerreferences");
        String dpColNames = adminProps.getProperty("pl.excel.columns.defaultpoints");
        String lColNames =  adminProps.getProperty("pl.excel.columns.language");
        String pCorelColNames =  adminProps.getProperty("pl.excel.columns.partnercorelation");
        adminUserName = adminProps.getProperty(PLConstants.PL_LOGIN_ADMIN_USERNAME, PLConstants.PL_ADMIN_DEFAULT_USERNAME);
        adminPassword = adminProps.getProperty(PLConstants.PL_LOGIN_ADMIN_PASSWORD, PLConstants.PL_ADMIN_DEFAULT_PASSWORD);     
        userUserName = adminProps.getProperty(PLConstants.PL_LOGIN_USER_USERNAME, PLConstants.PL_USER_DEFAULT_USERNAME);
        userPassword = adminProps.getProperty(PLConstants.PL_LOGIN_USER_PASSWORD, PLConstants.PL_USER_DEFAULT_PASSWORD);
        pColLst = Arrays.asList(pColNames.split(","));
        pRefColLst = Arrays.asList(pRefColNames.split(","));
        dpColLst = Arrays.asList(dpColNames.split(","));
        lColLst = Arrays.asList(lColNames.split(","));
        pCorelColLst = Arrays.asList(pCorelColNames.split(","));
        desktopUrl =  plProps.getProperty("desktop.url");
        mobileUrl = plProps.getProperty("mobile.url");
        mobileUsUrl = plProps.getProperty("mobile_us.url");

    }
}

3 个答案:

答案 0 :(得分:1)

“调用init方法失败”异常意味着您在@PostConstruct类中有PropUtil个注释。由于NullPointerException,Spring无法执行此方法。

答案 1 :(得分:1)

您正在读取afterPropertiesSet方法中的属性文件,在该方法中,您使用提取的属性来调用它们上的拆分。这不是唯一可以存在nullpointer的地方吗?由于您的配置看起来很好。 我认为最好的方法是查看属性文件并检查 afterPropertiesSet()方法中提到的每个属性是否存在。

null必须位于其中一个属性中,您可能错过了其中一个属性,因为这些属性是以后在同一方法中使用的唯一属性

String pColNames =  adminProps.getProperty("pl.excel.columns.partners");
String pRefColNames =  adminProps.getProperty("pl.excel.columns.partnerreferences");
String dpColNames = adminProps.getProperty("pl.excel.columns.defaultpoints");
String lColNames =  adminProps.getProperty("pl.excel.columns.language");
String pCorelColNames =  adminProps.getProperty("pl.excel.columns.partnercorelation");

答案 2 :(得分:0)

所有自动装配的字段必须声明为bean,并且位于组件扫描程序正在扫描的包中。

要使这些类bean添加@Component注释:

@Component
public class PropUtil{

}

然后确保它们位于Spring正在扫描组件的包中。确定这一点的一个技巧是将日志记录设置为INFO级别。然后在启动时扫描日志记录消息。 Spring将列出它找到的每个bean,我相信这些软件包已被扫描。