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);
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~