请问例子中action里的service是如何注入进来的?
看一个ssh项目视频时发现在action中注入service时使用了叫做 “默认按照名称注入”的方法,在看了代码后发现action没有被交由spring管理,不存在action包含<property ref="staffService">,另外也没用注解,那这里的service是如何被注入进来的呢?
测试过原代码运行是没问题的,但是我自己这样每次都是报 staffService.login(staff);这的空指针异常啊,求解!
staffAction.java
public class StaffAction extends ActionSupport implements ModelDriven<CrmStaff> {
//封装数据
private CrmStaff staff = new CrmStaff();
@Override
public CrmStaff getModel() {
return staff ;
}
//默认按照名称注入
private StaffService staffService;
public void setStaffService(StaffService staffService) {
this.staffService = staffService;
}
public String login(){
//1 查询员工
CrmStaff findStaff = staffService.login(staff);
...省略..
applicationContext-staff.xml
<!-- 员工配置项:dao、service -->
<bean id="staffDao" class="com.itheima.crm.staff.dao.impl.StaffDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="staffService" class="com.itheima.crm.staff.service.impl.StaffServiceImpl">
<property name="staffDao" ref="staffDao"></property>
</bean>
struts-staff.xml
<struts>
<!-- 员工配置 -->
<package name="sta" namespace="/" extends="common">
<action name="staffAction_*" class="com.itheima.crm.staff.web.action.StaffAction" method="{1}">
...省略...
<action>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
解决了,应该是Struts2跟Spring整合没有成功。参考资料如下:
Action中引用的业务类不需要自己去初始化,Struts2的Spring插件会使用bean的自动装配将业务类注入进来,其实Action也不是Struts2创建的,而是Struts2的Spring插件创建的。默认情况下,插件使用by name的方式装配,可以通过增加Struts2常量来修改匹配方式:设置方式为:struts.objectFactory.spring.autoWire = typeName,可选的装配参数如下:
name:相当于spring配置的autowrie="byName"(默认)
type:相当于spring配置的autowrie="byType"
auto:相当于spring 配置的autowrie="autodetect"
constructor: 相当于spring配置的autowrie="constructor"
注:第二种需要jar包 struts2-spring-plugin-2.3.15.1.jar 和 commons-lang3-3.1.jar 缺一不可
struts和spring整合的两种方式