当通过反射获取任务所在类的方法时,方法中通过依赖注入进来的对象全部为空导致异常报错。
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();