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

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐