问题描述:
当通过反射获取任务所在类的方法时,方法中通过依赖注入进来的对象全部为空导致异常报错。
String repXml = ""; RepTransaction transaction = S_UtilsXml.getRepTransaction((String) msg); Class controller = Class.forName("com.yu.netty_esb.ServerController.GetStudentInfoController"); //创建对象 Object object = controller.newInstance(); Method method = controller.getMethod("GetStudentInfo",Object.class,RepTransaction.class);
原因分析:
通过class.newInstance() 获取类的方式没有与Spring容器关联起来获取bean,虽然也能拿到类的实例,但是如果类里面有@Autowired这种方式注入的对象时就会为空,无法获取到对象。
思路:因为反射获取的对象不被Spring所管理,所以可以从Spring中获取对象实例。
首先引入:
@Autowired private ApplicationContext applicationContext;
在反射类中使用
Class<?> clazz = Class.forName(classname); //获取bean, 这个就是已经注入好的javaBean Object bean = applicationContext.getBean(clazz); applicationContext.getAutowireCapableBeanFactory().autowireBean(bean);