问题描述:
当通过反射获取任务所在类的方法时,方法中通过依赖注入进来的对象全部为空导致异常报错。
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);