gpt4 book ai didi

java - Spring @Autowired 字段返回 null

转载 作者:行者123 更新时间:2023-12-02 06:22:21 26 4
gpt4 key购买 nike

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

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

}
}

最佳答案

您正在 afterPropertiesSet 方法中读取属性文件,您可以在该方法中使用提取的属性对它们调用 split。这不是唯一可以有空指针的地方吗?因为你的配置看起来不错。我认为最好的方法是查看属性文件并检查 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");

关于java - Spring @Autowired 字段返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20905219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com