记录手写一次ssm框架遇到的一些坑之注入失败

由于没有实现单例或者说再contrllerMap和iocMap中实现同一个类两个对象,导致仅仅注入其中一个对象的坑

简介

  • 最近一直在尝试实现一个自己的ssm框架,前断时间已经分别实现了mvc 和 mybatis,其中在实现mvc的时候没有实现autowired注解,在整合ssm框架的时候开始实现,但是却碰上了问题(最近有时间的话,我会分别为之前实现的mvc和mybatis分别写一个框架的,这次也不全部分享源码,等有空全部实现后再分享上来)

文件目录结构

在这里插入图片描述

出现的问题

  • 在下图中的controller中,我进行注入一个service,但是在请求链接的时候,调用的方法中调用了userServiceImpl,但是提示userServiceImpl为空
  • 在这里插入图片描述
  • 我到MyDispatcherServlet类中查看我实现ioc的代码
 private void doIoc(){
    	if(ioc.isEmpty()) return ;
    	for(Entry<String, Object> entry : ioc.entrySet()){
    		Field[] fields = entry.getValue().getClass().getDeclaredFields();
    		for(Field field : fields){
    			 field.setAccessible(true);
    			if(field.isAnnotationPresent(MyAutowired.class)){
    				String autowiredValueName = field.getAnnotation(MyAutowired.class).value();
    				if(autowiredValueName == null || autowiredValueName.equals("")){
    					autowiredValueName = toLowerFirstWord(field.getType().getSimpleName());
    				}
    				field.setAccessible(true);
    				try {
    					field.set(entry.getValue(), ioc.get(autowiredValueName));
    					
					} catch (IllegalArgumentException e) {
						// TODO: handle exception
						e.printStackTrace();
					}catch (IllegalAccessException  e) {
						// TODO: handle exception
						e.printStackTrace();
					}
    			}
    		}
    		
    	}
    	
    }
 

  • 经过一系列各种判断,我确认我应该已经将userServiceImpl对象赋予了ioc容器中相应对象值了
    经过一系列检查发现,当时候实现mvc的时候服务controllerMap的对象和iocMap中的对象不是同一个对象,都是newInstance 出来的,最后我将赋值的对象改为同一个对象,最后成功了。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值