调用时发现标记为@Autowired的变量是null的,检查了半天,发现类是这样拿到的
Class classType = Class.forName(classPath);
Method method = classType.getDeclaredMethod("triggerPlaceOrderEngine", new Class[]{String.class});
Map map = (Map) method.invoke(classType.newInstance(), dataJson);
问题已经很明显,因为执行时,变量实例是classType.newInstance()出来的,即自己new出来的,
所以该类classType实例中并未经过springmvc的自动注入操作,也即@Autowired并未得到正确解析,
所以解决方法是在该代码所在的类中添加
@Autowired
private ApplicationContext applicationContext;
代码,得到springmvc的容器信息,然后在通过容器获得该类的实例
Object instance = applicationContext.getBean("tKZJPlaceOrderEngine");
这样更改上述问题代码为:
Object instance = applicationContext.getBean("tKZJPlaceOrderEngine");
;
Class classType = Class.forName(classPath);
Method method = classType.getDeclaredMethod("triggerPlaceOrderEngine", new Class[]{String.class});
Map map = (Map) method.invoke(instance, dataJson);
调用的classType类的方法时,该类的
@Autowired
标记的属性非空,被springmvc正常注入了。