spring反射创建@Autowired注入为null解决
·
当通过反射获取任务所在类的方法时,方法中通过依赖注入进来的对象全部为空导致异常报错。
MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();
Method method = proceedingJoinPoint.getTarget().getClass().getMethod(
methodSignature.getName(), methodSignature.getMethod().getParameterTypes());
ValidatorHandler validatorHandler = method.getAnnotation(ValidatorHandler.class);
Class<?> clazz = validatorHandler.validators();
Object object = clazz.newInstance();
AbstractValidator abstractValidator = (AbstractValidator) object;
通过class.newInstance() 获取类的方式没有与Spring容器关联起来获取bean,虽然也能拿到类的实例,但是如果类里面有@Autowired这种方式注入的对象时就会为空,无法获取到对象。
因为反射获取的对象不被Spring所管理,所以可以从Spring中获取对象实例。
@Autowired
private ApplicationContext applicationContext;
MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();
Method method = proceedingJoinPoint.getTarget().getClass().getMethod(
methodSignature.getName(), methodSignature.getMethod().getParameterTypes());
ValidatorHandler validatorHandler = method.getAnnotation(ValidatorHandler.class);
Class<?> clazz = validatorHandler.validators();
///Object object = clazz.newInstance();
//获取bean, 这个就是已经注入好的javaBean
Object object = applicationContext.getBean(clazz);
AbstractValidator abstractValidator = (AbstractValidator) object;
Object[] args = proceedingJoinPoint.getArgs();
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)