Maison > Questions et réponses > le corps du texte
Comme le montre l'image :
@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;
}
}
Après que la classe créée ait implémenté HandlerMethodArgumentResolver, il a été constaté que les instances de bean qui y étaient injectées avaient échoué. L'instance redisTemplate ci-dessus était nulle lors de l'exécution et les autres classes du même package étaient normales.
S'il vous plaît, dites-moi ce qui a causé l'échec de l'injection du grain.
PHP中文网2017-05-17 09:59:40
La situation de UserArgumentResolver
对象没有被IoC
容器管理, 因为在@Autowired
注解没有配置required=false
的情况下spring
发现没有该对象会直接抛出Exception
, 不会出现注入null
que vous utilisez.
我想大声告诉你2017-05-17 09:59:40
L'interface HandlerMethodArgumentResolver doit être instanciée d'ici Spring, et non gérée par l'instanciation du conteneur IOC