为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 1225 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号