Spring将子类自动注入父类失败

@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方法略


拉风的咖菲猫
浏览 1226回答 6
6回答

翻过高山走不出你

@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是用于处理请求的

幕布斯7119047

指的是根据请求的参数绑定为相应的实体类型吗?只不过这些实体类型都继承自BaseClassDo 是吗?比如前端传job_id、worker_id、login_pw、worker_name这四个参数,这个时候在index方法的参数实际类型就是LoginDo了?然后如果前端传其他参数,那就会绑定到另一个BaseClassDo的具有这些参数对应字段的子类,是这个意思不?

偶然的你

通过页面请求发现代码真正逻辑是页面请求了一个子类Action的方法,而这个方法里面调用了父类的一个方法,此时父类里面的Service一直无法注入,对于上面所提的这种需求,实际上是需要在子类做Spring注入的同时也进行父类的Spring注入,那么这种需要这样的配置:<bean&nbsp;id="barePhoneAction"&nbsp;class="com.eshore.crm.contrl.termmgr.mgr.action.BarePhoneAction"&nbsp;scope="prototype"&nbsp;parent="termCommonAction"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<property&nbsp;name="orderVerifyApiFacade"&nbsp;ref="ord.bizprov.orderVerifyApiFacade"/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<property&nbsp;name="orderListQryApiFacade"&nbsp;ref="ord.query.orderListQryApiFacade"/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<property&nbsp;name="channelQryApiFacade"&nbsp;ref="cfguse.channel.channelQryApiFacade"&nbsp;/> </bean>经过上面的设置以后,请求子类的Action方法,子类方法中调用父类方法时,就不会出现父类不发生注入的问题了。

慕妹3242003

@Autowired的使用上有问题。一般情况下,@Autowired标注在方法上的时候,会在容器初始化时去调用方法“进行赋值”,但也仅此而已了,之后的操作和@Autowired就没关系了正常的前后端请求传递的参数是由前端传入的,并不是容器注入的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java