2016-04-16 15 views
0

registrieren I Frühjahr hateoas im Frühjahr bin mit und bekam das Problem Feder konnte nicht Instanz hateoas Ressource-Assembler, hier ist mein Snippet-Code:Frühling kann nicht Frühling hateoas Ressource-Assembler

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 ; 

    .... 


} 

Die Ausnahme ausgelöst wurde, ist „Keine Warte Bohnen vom Typ [UserHateoasResourceAssembler] für Depen gefunden dency. Ich weiß, dass diese Ursache nicht Instanz von Assembler erstellen kann.

Ich habe versucht, @Service oder @Component zu verwenden, aber beides funktioniert nicht. Ich habe auch versucht, @Autowire zu verwenden, aber es hat auch nicht funktioniert. Ich muss das beheben, indem ich @Scope (proxyMode = ScopedProxyMode.TARGET_CLASS) hinzufüge. Aber ich frage mich, ob es eine andere Lösung gibt, um es zu lösen, anstatt @Scope zu verwenden?

Danke.

Antwort

0

Ich fand die elegante Lösung. Aufgrund meiner Anwendung, die generierten Code verwendet und @EnableAspectJAutoProxy verwendet hat, hat dieser Annotation-Standardwert auto-proxy = false und JDK-Proxy verwendet, sodass fast die Instanz der Klasse, die eine Schnittstelle implementiert, nicht zulässig war. Wir müssen stattdessen die Schnittstelle einlesen. So die Implementierungsklasse zu injizieren, haben zwei Möglichkeiten:

  1. Set @EnableAspectJAutoProxy (proxyTargetClass = true)

  2. diese Anmerkung entfernen, wenn wir wirklich nicht, dass müssen.

Verwandte Themen