簡體   English   中英

Spring @Autowired字段返回null

[英]Spring @Autowired field returns null

我試圖在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- *)

<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");

    }
}

“調用init方法失敗”異常意味着您在PropUtil類中有@PostConstruct注釋。 由於NullPointerException ,Spring無法執行此方法。

您正在讀取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");

所有自動裝配的字段必須聲明為bean,並且位於組件掃描程序正在掃描的包中。

要使這些類bean添加@Component批注:

@Component
public class PropUtil{

}

然后確保它們位於Spring正在掃描組件的包中。 確定這一點的一個技巧是將日志記錄設置為INFO級別。 然后在啟動時掃描日志記錄消息。 Spring將列出它找到的每個bean,我相信掃描的包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM