Action中Spring注入的Service为Null的解决方法

昨天开发联系人功能时,突然遇到一个bug,Action中的service注入结果为Null,debug了一天半,终于找到了原因。

源代码

Action.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class LinkManAction extends ActionSupport implements ModelDriven<LinkMan> {
private LinkMan linkMan = new LinkMan();
private LinkManService lms;
@Override
public String execute() throws Exception {
lms.save(linkMan);
return "list";
}
@Override
public LinkMan getModel() {
return linkMan;
}
public void setLinkManService(LinkManService lms) {
this.lms = lms;
}
}

applicationContext.xml中

1
2
3
4
5
6
7
8
9
10
11
<bean name="linkManAction" class="action.LinkManAction" scope="prototype">
<property name="lms" ref="linkManService"></property>
</bean>
<bean name="linkManService" class="service.LinkManServiceImpl">
<property name="lmd" ref="linkManDao"></property>
</bean>
<bean name="linkManDao" class="dao.LinkManDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

Struts.xml中

1
2
3
<action name="linkMan" class="action.LinkManAction" method="execute">
<result name="list">/jsp/success.jsp</result>
</action>

bug

访问了/linkMan,并成功执行了LinkManAction中的execute方法,但是service注入结果为null,个人感觉service没有注入成功。
1

解决方法

service的bean name必须与action中要注入的service变量名相同。

1
private LinkManService lms;

rename为

1
private LinkManService linkManService;

对应applicationContext.xml中改为

1
2
<bean name="linkManService" class="service.LinkManServiceImpl" >
<property name="lmd" ref="linkManDao" ></property> </bean>