我正在尝试在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");
}
}
答案 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,我相信这些软件包已被扫描。