Кто-нибудь знает, как ввести зависимость в @ControllerAdvice?@ControllerAdvice с @Autowired зависимость не впрыскивается
My @ControllerAdvice расширяет Spring ResponseEntityExceptionHandler и не использует интерфейсы.
@ControllerAdvice вызывается правильно, но @Autowired зависимость никогда не вводится. Ошибок при загрузке нет, зависимость просто равна нулю.
Я предполагаю, что это связано с тем, как Spring проксирует @ControllerAdvice с cglib так, что @Autowired аннотация теряется.
Я протестировал реализацию интерфейса, так что Spring может создать прокси-сервер JDK, но он тоже не работает. Фактически с интерфейсом он даже не вызывался вообще ... даже если я также аннотирую интерфейс с @ControllerAdvice.
Есть ли способ указать, что Spring должен использовать прокси JDK для этого конкретного случая?
EDIT: Я использую Spring 3.2.4.RELEASE, кстати.
образца Класс:
@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {
@Autowired(required = true)
public AuditService auditService;
@ExceptionHandler(value = { RuntimeException.class })
public final ResponseEntity<Object> handleRuntimeException(Exception ex, WebRequest request) {
// auditService is null here!
}
}
Вы уверены, что это методы (где ссылка null) не 'final'? Вы уверены, что вы проверяете состояние правильного объекта в нужное время - прокси-сервер CGLIB по-прежнему является другим экземпляром, поля которого равны нулю, а просто делегирует вызовы компоненту позади, поскольку эти методы не могут быть выполнены окончательный. –