controller->service->dao
出现空指针的原因:当通过反射调方法时,spring注入的对象获取不到即为null。
案例一:
//获取AServiceImpl的字节码对象
Class clazz = AServiceImpl.class;
//创建AServiceImpl对象
AServiceImpl serviceImpl = clazz.newInstance();
//获取要执行的方法
Method method = clazz .getMethod(“findAll”);
//serviceImpl 去执行方法;
method.invoke(serviceImpl );
报错:空指针
解决办法:
@Autowired
private ADao aDao;
//获取AServiceImpl的字节码对象
Class clazz = AServiceImpl.class;
//创建AServiceImpl对象
AServiceImpl serviceImpl = clazz.newInstance();
//获取要执行的方法
Method method = clazz .getMethod("findAll");
//获取AServiceImpl类中注入的Adao属性;
//此处需要使用暴力反射,因为private修饰
Filed filed = clazz .getDeclaredFiled("ADao"); //此处获取到的为null
//为filed 赋值
filed.set(serviceImpl ,aDao);
//执行方法
method.invoke(serviceImpl );
完美解决