鍍金池/ 問答/Java  網(wǎng)絡(luò)安全/ 請問例子中action里的service是如何注入進來的?

請問例子中action里的service是如何注入進來的?

看一個ssh項目視頻時發(fā)現(xiàn)在action中注入service時使用了叫做 “默認按照名稱注入”的方法,在看了代碼后發(fā)現(xiàn)action沒有被交由spring管理,不存在action包含<property ref="staffService">,另外也沒用注解,那這里的service是如何被注入進來的呢?
測試過原代碼運行是沒問題的,但是我自己這樣每次都是報 staffService.login(staff);這的空指針異常啊,求解!

staffAction.java

public class StaffAction extends ActionSupport implements ModelDriven<CrmStaff> {
    //封裝數(shù)據(jù)
    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>
回答
編輯回答
大濕胸

解決了,應(yīng)該是Struts2跟Spring整合沒有成功。參考資料如下:

業(yè)務(wù)類在Spring配置文件中配置,Action不需要配置,Struts2的Action像沒有整合Spring之前一樣配置,<action>的class屬性指定業(yè)務(wù)邏輯控制器類的全限定名。

Action中引用的業(yè)務(wù)類不需要自己去初始化,Struts2的Spring插件會使用bean的自動裝配將業(yè)務(wù)類注入進來,其實Action也不是Struts2創(chuàng)建的,而是Struts2的Spring插件創(chuàng)建的。默認情況下,插件使用by name的方式裝配,可以通過增加Struts2常量來修改匹配方式:設(shè)置方式為:struts.objectFactory.spring.autoWire = typeName,可選的裝配參數(shù)如下:

name:相當(dāng)于spring配置的autowrie="byName"(默認)
type:相當(dāng)于spring配置的autowrie="byType"
auto:相當(dāng)于spring 配置的autowrie="autodetect"
constructor: 相當(dāng)于spring配置的autowrie="constructor"

注:第二種需要jar包 struts2-spring-plugin-2.3.15.1.jar 和 commons-lang3-3.1.jar 缺一不可
struts和spring整合的兩種方式

2017年11月10日 11:11