如圖:
@Component
public class UserArgumentResolver implements HandlerMethodArgumentResolver{
@Autowired
private RedisTemplate<String,User> redisTemplate;
@Override
public boolean supportsParameter(MethodParameter parameter) {
if(parameter.getParameterAnnotation(CurrentUser.class)!=null&& parameter.getParameterType()==User.class){
return true;
}
return false;
}
@Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest webRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
HttpServletRequest request= (HttpServletRequest) webRequest.getNativeRequest();
// todo
return null;
}
}
建立的類別實作HandlerMethodArgumentResolver後,發現在裡面註入bean實例都失效了,向上面的redisTemplate實例在運行的時候就為null,同一個包下其他的class都是正常。
請問是什麼原因導致bean的注入失敗。
你使用的
UserArgumentResolver
对象没有被IoC
容器管理, 因为在@Autowired
注解没有配置required=false
的情况下spring
发现没有该对象会直接抛出Exception
, 不会出现注入null
的情況.HandlerMethodArgumentResolver介面應該是被spring實例化的,不是IOC容器實例化管理的