Action类中无法实例化service层对象

时间:2021-11-17 09:21:39
我的action package中有两个类,service package中有两个类,struts spring配置完成,其中登陆时UserAction中实例化UserService对象成功,登陆验证成功后跳转MessageAction需要实例化MessageService对象时报空指针异常,检验后确实为实例化MessageService对象失败。求解啊。

21 个解决方案

#1


@Resource(name="xxxService")
private XXXService xxxService;

你这个service是不是没有注入好。检查一下是不是name写错了什么的。

#2


我实在spring中手动注入的,之前的UserAction的注入就可以实例化对象,第二个类就不行,跪求解啊
<bean id="usermanager" class="com.oa.service.impl.UserManagerImpl"
abstract="false" lazy-init="default" autowire="default">
<property name="userinfoDao">
<ref bean="UserinfoDAO"/>
</property>
</bean>
<bean id="useraction" class="com.oa.action.UserAction" abstract="false"
lazy-init="default" autowire="default" >
<property name="um">
<ref bean="usermanager" />
</property>
</bean>

这个输出检验后,可以进入Action但是实例化mm对象失败
<bean id="messageaction" class="com.oa.action.MessageAction" abstract="false"
lazy-init="default" autowire="default" >
<property name="mm">
<ref bean="messagemanager" />
</property>
</bean>
<bean id="messagemanager" class="com.oa.service.impl.MessageManagerImlp"
abstract="false" lazy-init="default" autowire="default">
<property name="messageDAO">
<ref bean="MessageDAO"/>
</property>
</bean>

#3


没看到你哪注入MessageService

#4


class="com.oa.service.impl.MessageManagerImlp"这里Imlp还是Impl有没写错了
还有struts的action的bean要加上scope="prototype"属性

#5


MessageManager Imlp是不是写错了。

#6


检查一下-->
你的MessageAction里面是不是这样定义的:
private MessageManagerService messageManagerService;  //你的接口
public void setmessageManagerService (MessageManagerService messageManagerService) {
this.messageManagerService = messageManagerService;
}

主要是你的MessageManagerImlp里面的Dao是否注入正确:
private MessageDAO messageDAO;
public void setMessageDAO(MessageDAO messageDAO) {
this.messageDAO = messageDAO;
}


#7


引用 3 楼 huxiweng 的回复:
没看到你哪注入MessageService
按道理spring里new bean了之后在Action只要声明并set get就能在方法用这个对象了啊。。。另一个类也实例化成功了啊。。。我怀疑是单例多例的问题啊

#8


引用 4 楼 suciver 的回复:
class="com.oa.service.impl.MessageManagerImlp"这里Imlp还是Impl有没写错了
还有struts的action的bean要加上scope="prototype"属性
我也怀疑是这个,但是改了之后不行啊T.T

#9


引用 6 楼 wlwlwlwl015 的回复:
检查一下-->
你的MessageAction里面是不是这样定义的:
private MessageManagerService messageManagerService;  //你的接口
public void setmessageManagerService (MessageManagerService messageManagerService) {
this.messageManagerService = messageManagerService;
}

主要是你的MessageManagerImlp里面的Dao是否注入正确:
private MessageDAO messageDAO;
public void setMessageDAO(MessageDAO messageDAO) {
this.messageDAO = messageDAO;
}
恩恩,这都是自动生成的啊。没问题的,T。T

#10


<bean id="messagemanager" class="com.oa.service.impl.MessageManagerImlp"


这里的是接口吧  你这应该是实现类 ,所以不行

action里定义的变量也得是接口类型的。

#11


引用 5 楼 fangmingshijie 的回复:
MessageManager Imlp是不是写错了。
好细心啊,项目还是有错啊。。。囧

#12


引用 11 楼 u013892905 的回复:
Quote: 引用 5 楼 fangmingshijie 的回复:

MessageManager Imlp是不是写错了。
好细心啊,项目还是有错啊。。。囧

报什么错~依赖注入也就这点东西。没什么的。估计是你spring的xml文件里面bean的name、property的name、class的name写的和项目的包名类型注入的属性名不匹配造成的。建议你一个一个仔细检查核对。

#13


引用 10 楼 u012463264 的回复:
<bean id="messagemanager" class="com.oa.service.impl.MessageManagerImlp"


这里的是接口吧  你这应该是实现类 ,所以不行

action里定义的变量也得是接口类型的。
接口里没有DAO的私有属性啊。。。无法实例化吧

#14


引用 12 楼 wlwlwlwl015 的回复:
Quote: 引用 11 楼 u013892905 的回复:

Quote: 引用 5 楼 fangmingshijie 的回复:

MessageManager Imlp是不是写错了。
好细心啊,项目还是有错啊。。。囧

报什么错~依赖注入也就这点东西。没什么的。估计是你spring的xml文件里面bean的name、property的name、class的name写的和项目的包名类型注入的属性名不匹配造成的。建议你一个一个仔细检查核对。
检查了好多遍了啊,囧,还是没什么头绪啊

#15


引用 13 楼 u013892905 的回复:
Quote: 引用 10 楼 u012463264 的回复:

<bean id="messagemanager" class="com.oa.service.impl.MessageManagerImlp"


这里的是接口吧  你这应该是实现类 ,所以不行

action里定义的变量也得是接口类型的。
接口里没有DAO的私有属性啊。。。无法实例化吧


注入  不是实例化 。

#16


注入到action  

你的定义一个接口类型的变量 。这样才能被注入,该接口的实例,才能够使用类中的方法

#17


<ref bean="MessageDAO"/>  MessageDAO 在xml里面没有定义

#18


引用 17 楼 zcwgogo 的回复:
<ref bean="MessageDAO"/>  MessageDAO 在xml里面没有定义
这个有的,没有列出来啊。

#19




引用 18 楼 u013892905 的回复:
Quote: 引用 17 楼 zcwgogo 的回复:

<ref bean="MessageDAO"/>  MessageDAO 在xml里面没有定义
这个有的,没有列出来啊。
UserinfoDAO也有么?你把异常和xml整改贴出来,还有bean id 的大小写 注意下

#20


引用 19 楼 zcwgogo 的回复:
Quote: 引用 18 楼 u013892905 的回复:

Quote: 引用 17 楼 zcwgogo 的回复:

<ref bean="MessageDAO"/>  MessageDAO 在xml里面没有定义
这个有的,没有列出来啊。
UserinfoDAO也有么?你把异常和xml整改贴出来,还有bean id 的大小写 注意下
恩恩。我逆向工程的数据库,这些都有,现在改不出来,就是只有UserAction类才能实例化Service层方法(我的service层中两个类UserAction中都能使用都正常当然spring也配置了),别的类不行,很纠结

#21


请问,这个问题是怎样解决的

#1


@Resource(name="xxxService")
private XXXService xxxService;

你这个service是不是没有注入好。检查一下是不是name写错了什么的。

#2


我实在spring中手动注入的,之前的UserAction的注入就可以实例化对象,第二个类就不行,跪求解啊
<bean id="usermanager" class="com.oa.service.impl.UserManagerImpl"
abstract="false" lazy-init="default" autowire="default">
<property name="userinfoDao">
<ref bean="UserinfoDAO"/>
</property>
</bean>
<bean id="useraction" class="com.oa.action.UserAction" abstract="false"
lazy-init="default" autowire="default" >
<property name="um">
<ref bean="usermanager" />
</property>
</bean>

这个输出检验后,可以进入Action但是实例化mm对象失败
<bean id="messageaction" class="com.oa.action.MessageAction" abstract="false"
lazy-init="default" autowire="default" >
<property name="mm">
<ref bean="messagemanager" />
</property>
</bean>
<bean id="messagemanager" class="com.oa.service.impl.MessageManagerImlp"
abstract="false" lazy-init="default" autowire="default">
<property name="messageDAO">
<ref bean="MessageDAO"/>
</property>
</bean>

#3


没看到你哪注入MessageService

#4


class="com.oa.service.impl.MessageManagerImlp"这里Imlp还是Impl有没写错了
还有struts的action的bean要加上scope="prototype"属性

#5


MessageManager Imlp是不是写错了。

#6


检查一下-->
你的MessageAction里面是不是这样定义的:
private MessageManagerService messageManagerService;  //你的接口
public void setmessageManagerService (MessageManagerService messageManagerService) {
this.messageManagerService = messageManagerService;
}

主要是你的MessageManagerImlp里面的Dao是否注入正确:
private MessageDAO messageDAO;
public void setMessageDAO(MessageDAO messageDAO) {
this.messageDAO = messageDAO;
}


#7


引用 3 楼 huxiweng 的回复:
没看到你哪注入MessageService
按道理spring里new bean了之后在Action只要声明并set get就能在方法用这个对象了啊。。。另一个类也实例化成功了啊。。。我怀疑是单例多例的问题啊

#8


引用 4 楼 suciver 的回复:
class="com.oa.service.impl.MessageManagerImlp"这里Imlp还是Impl有没写错了
还有struts的action的bean要加上scope="prototype"属性
我也怀疑是这个,但是改了之后不行啊T.T

#9


引用 6 楼 wlwlwlwl015 的回复:
检查一下-->
你的MessageAction里面是不是这样定义的:
private MessageManagerService messageManagerService;  //你的接口
public void setmessageManagerService (MessageManagerService messageManagerService) {
this.messageManagerService = messageManagerService;
}

主要是你的MessageManagerImlp里面的Dao是否注入正确:
private MessageDAO messageDAO;
public void setMessageDAO(MessageDAO messageDAO) {
this.messageDAO = messageDAO;
}
恩恩,这都是自动生成的啊。没问题的,T。T

#10


<bean id="messagemanager" class="com.oa.service.impl.MessageManagerImlp"


这里的是接口吧  你这应该是实现类 ,所以不行

action里定义的变量也得是接口类型的。

#11


引用 5 楼 fangmingshijie 的回复:
MessageManager Imlp是不是写错了。
好细心啊,项目还是有错啊。。。囧

#12


引用 11 楼 u013892905 的回复:
Quote: 引用 5 楼 fangmingshijie 的回复:

MessageManager Imlp是不是写错了。
好细心啊,项目还是有错啊。。。囧

报什么错~依赖注入也就这点东西。没什么的。估计是你spring的xml文件里面bean的name、property的name、class的name写的和项目的包名类型注入的属性名不匹配造成的。建议你一个一个仔细检查核对。

#13


引用 10 楼 u012463264 的回复:
<bean id="messagemanager" class="com.oa.service.impl.MessageManagerImlp"


这里的是接口吧  你这应该是实现类 ,所以不行

action里定义的变量也得是接口类型的。
接口里没有DAO的私有属性啊。。。无法实例化吧

#14


引用 12 楼 wlwlwlwl015 的回复:
Quote: 引用 11 楼 u013892905 的回复:

Quote: 引用 5 楼 fangmingshijie 的回复:

MessageManager Imlp是不是写错了。
好细心啊,项目还是有错啊。。。囧

报什么错~依赖注入也就这点东西。没什么的。估计是你spring的xml文件里面bean的name、property的name、class的name写的和项目的包名类型注入的属性名不匹配造成的。建议你一个一个仔细检查核对。
检查了好多遍了啊,囧,还是没什么头绪啊

#15


引用 13 楼 u013892905 的回复:
Quote: 引用 10 楼 u012463264 的回复:

<bean id="messagemanager" class="com.oa.service.impl.MessageManagerImlp"


这里的是接口吧  你这应该是实现类 ,所以不行

action里定义的变量也得是接口类型的。
接口里没有DAO的私有属性啊。。。无法实例化吧


注入  不是实例化 。

#16


注入到action  

你的定义一个接口类型的变量 。这样才能被注入,该接口的实例,才能够使用类中的方法

#17


<ref bean="MessageDAO"/>  MessageDAO 在xml里面没有定义

#18


引用 17 楼 zcwgogo 的回复:
<ref bean="MessageDAO"/>  MessageDAO 在xml里面没有定义
这个有的,没有列出来啊。

#19




引用 18 楼 u013892905 的回复:
Quote: 引用 17 楼 zcwgogo 的回复:

<ref bean="MessageDAO"/>  MessageDAO 在xml里面没有定义
这个有的,没有列出来啊。
UserinfoDAO也有么?你把异常和xml整改贴出来,还有bean id 的大小写 注意下

#20


引用 19 楼 zcwgogo 的回复:
Quote: 引用 18 楼 u013892905 的回复:

Quote: 引用 17 楼 zcwgogo 的回复:

<ref bean="MessageDAO"/>  MessageDAO 在xml里面没有定义
这个有的,没有列出来啊。
UserinfoDAO也有么?你把异常和xml整改贴出来,还有bean id 的大小写 注意下
恩恩。我逆向工程的数据库,这些都有,现在改不出来,就是只有UserAction类才能实例化Service层方法(我的service层中两个类UserAction中都能使用都正常当然spring也配置了),别的类不行,很纠结

#21


请问,这个问题是怎样解决的