Spring无法注册spring hateoas资源汇编程序

时间:2016-04-16 15:30:36

标签: spring spring-hateoas

我在春天使用spring hateoas并且遇到问题是spring不能实例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 ;

    ....


}

抛出的异常是&#34;没有找到类型[UserHateoasResourceAssembler]的限定bean用于依赖。我知道这个根本原因是无法创建汇编程序的实例。

我尝试使用@Service或@Component,但两者都不起作用。我也尝试使用@Autowire,但也没有用。我必须通过添加@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)来解决这个问题。但我想知道是否还有其他解决办法来解决它而不是使用@Scope?

感谢。

1 个答案:

答案 0 :(得分:0)

我找到了优雅的解决方案。由于我的应用程序使用生成的代码并且它使用了@EnableAspectJAutoProxy,这个注释默认设置auto-proxy = false并使用JDK代理,因此几乎不允许实现接口的类实例。我们必须@inject接口。因此要注入实现类,请在此处有两个选项:

  1. 设置@EnableAspectJAutoProxy(proxyTargetClass = true)

  2. 如果我们真的不需要,请删除此注释。