因为我们是手动通过反射获得的Bean的实例,这种方式相当于我们new Bean(),此Bean的实例已完全脱离Spring容器,所以Spirng无法感知它的存在,所以调用类中的依赖注入类和AOP会失效
解决方法:以下均为局部核心代码,需要根据自己场景相应调整
1:
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
Class clazz = wac.getBean("XService").getClass();
Method method = clazz.getDeclaredMethod(methodName);
method.invoke(wac.getBean("XService"));
2:
@Autowired
private ApplicationContext applicationContext;
Class<?> serviceClazz = Class.forName(serviceName);
Class<?> paramClazz = Class.forName(paramName);
Method method = serviceClazz.getMethod(methodName, paramClazz);
method.invoke(applicationContext.getBean(serviceClazz), paramObj);
3:多参数反射
Class<?> serviceClazz = Class.forName(se
本文探讨了如何使用Java反射导致Spring的依赖注入和AOP功能失效的原因,指出当通过反射创建Bean实例时,该实例不再受Spring容器管理,因此其依赖注入和AOP拦截失效。解决方案提供了部分核心代码片段,提示读者根据具体场景进行调整。
最低0.47元/天 解锁文章
825

被折叠的 条评论
为什么被折叠?



