spring boot 反射创建@Autowired注入为null解决

问题描述:

当通过反射获取任务所在类的方法时,方法中通过依赖注入进来的对象全部为空导致异常报错。

 

      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);

 

posted @ 2022-05-12 10:04  会飞的猪仔  阅读(1365)  评论(0)    收藏  举报