2016-04-16 1 views
0

Я использую весной hateoas весной и получила проблема весной может не экземпляр hateoas ассемблера ресурсов, вот мой сниппает код:Весна не может зарегистрировать пружинные hateoas ассемблера ресурсов

UserHateoasResourceAssembler.java:

@Service 
public class UserHateoasResourceAssembler extends ResourceAssemblerSupport<UserDTO, UserHateoasResource> { 

    public UserHateoasResourceAssembler() { 
     super(UserController.class, UserHateoasResource.class); 
    } 


    @Override 
    public UserHateoasResource toResource(UserDTO entity) { 
     UserHateoasResource resource = createResourceWithId(entity.getId(), entity);     
     return resource; 
    } 

    @Override 
    protected UserHateoasResource instantiateResource(UserDTO entity) { 
     return new UserHateoasResource(entity); 
    } 

} 

UserController.java:

@RestController 
@RequestMapping("/api/") 
public class UserController { 

    @Inject 
    private UserHateoasResourceAssembler userAssembler ; 

    .... 


} 

исключение было брошено «нет квалификационная рожкового типа [UserHateoasResourceAssembler] не найдено для висимость зидент. Я знаю, что эта первопричина не может создать экземпляр ассемблера.

Я попытался использовать @Service или @Component, но оба не работают. Я также попытался использовать @Autowire, но не работал. Я должен исправить это, добавив @Scope (proxyMode = ScopedProxyMode.TARGET_CLASS). Но мне интересно, есть ли другое решение для его решения вместо использования @Scope?

Спасибо.

ответ

0

Я нашел элегантное решение. Из-за моего приложения, использующего сгенерированный код, и он использовал @EnableAspectJAutoProxy, эта аннотация по умолчанию устанавливала auto-proxy = false и с использованием прокси JDK, поэтому почти экземпляр класса, реализующего интерфейс, не был разрешен. Вместо этого мы должны @inject интерфейса. Таким образом, чтобы впрыскивать класс реализации, есть 2 варианта здесь:

  1. Set @EnableAspectJAutoProxy (proxyTargetClass = True)

  2. Убрать эту аннотацию, если мы на самом деле не нужно.