亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring將子類自動注入父類失敗

Spring將子類自動注入父類失敗

拉風的咖菲貓 2019-04-19 15:15:10
@Controller public class LoginController{     @Resource(name="loginService")     private IService loginService;     @RequestMapping("/login")     @Autowired     public ModelAndView index(BaseClassDo logindo){         LoginDo ll= (LoginDo) logindo;         ModelAndView mv = new ModelAndView();         System.out.println(logindo); //      mv = loginService.doService(logindo);         mv.setViewName("login");         return mv;     } }上面index方法中,初始化的時候使用斷點顯示logindo是自動注入成功的,顯示的是子類的字段,但是之后從頁面jsp跳轉過來后,注入失敗,顯示的只有父類的兩個字段,而且強轉失敗java.lang.ClassCastException,難道從前臺傳到后天還有什么講究嗎使用@autowrie或@Resource都試過,沒有用下面是實體表父類public class BaseClassDo {     /**      * 業務類型      */     private String ywtype;     /**      * 業務狀態      */     private String ywstate;     getset方法略子類@Component("loginDo") public class LoginDo extends BaseClassDo {     private String job_id;     private int worker_id;     private String login_pw;     private String worker_name;     getset方法略
查看完整描述

6 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

@Controller
public class LoginController{

    @Resource(name="loginService")
    private IService loginService;

    @RequestMapping("/login")
    @Autowired
    public ModelAndView index(BaseClassDo logindo){
        LoginDo ll= (LoginDo) logindo;
        ModelAndView mv = new ModelAndView();
        System.out.println(logindo);
//      mv = loginService.doService(logindo);
        mv.setViewName("login");
        return mv;
    }
}

樓上說的對,你這方法上的@Autowired是想要做什么?和@RequestMapping一起用?
如果想通過方法注入的話,那新創建一個方法然后用上@Autowired注入就行了,至于@RequestMapping是用于處理請求的


查看完整回答
反對 回復 2019-05-14
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

指的是根據請求的參數綁定為相應的實體類型嗎?只不過這些實體類型都繼承自BaseClassDo 是嗎?比如前端傳job_id、worker_id、login_pw、worker_name這四個參數,這個時候在index方法的參數實際類型就是LoginDo了?然后如果前端傳其他參數,那就會綁定到另一個BaseClassDo的具有這些參數對應字段的子類,是這個意思不?

查看完整回答
反對 回復 2019-05-14
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

通過頁面請求發現代碼真正邏輯是頁面請求了一個子類Action的方法,而這個方法里面調用了父類的一個方法,此時父類里面的Service一直無法注入,對于上面所提的這種需求,實際上是需要在子類做Spring注入的同時也進行父類的Spring注入,那么這種需要這樣的配置:

<bean id="barePhoneAction" class="com.eshore.crm.contrl.termmgr.mgr.action.BarePhoneAction" scope="prototype" parent="termCommonAction">
        <property name="orderVerifyApiFacade" ref="ord.bizprov.orderVerifyApiFacade"/>
        <property name="orderListQryApiFacade" ref="ord.query.orderListQryApiFacade"/>
        <property name="channelQryApiFacade" ref="cfguse.channel.channelQryApiFacade" />
</bean>

經過上面的設置以后,請求子類的Action方法,子類方法中調用父類方法時,就不會出現父類不發生注入的問題了。


查看完整回答
反對 回復 2019-05-14
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

@Autowired的使用上有問題。
一般情況下,@Autowired標注在方法上的時候,會在容器初始化時去調用方法“進行賦值”,但也僅此而已了,之后的操作和@Autowired就沒關系了

正常的前后端請求傳遞的參數是由前端傳入的,并不是容器注入的


查看完整回答
反對 回復 2019-05-14
  • 6 回答
  • 0 關注
  • 1259 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號