【问题标题】:Autowiring of generic types doesn't work [Spring 4+]泛型类型的自动装配不起作用 [Spring 4+]
【发布时间】:2016-03-26 23:42:11
【问题描述】:

我正在使用 Spring 4.2.4.RELEASE 开发一个项目。

我听说过 Spring 4 的新特性(尤其是关于 autowiring of generic types),当以下代码没有编译时我很困惑:

@Service
public interface AuthenticationService<T> { ... }

public class VKAuthenticationService implements AuthenticationService<VKToken> { ... }

@RestController
public class VKAuthenticationController {
   @Autowired
   private AuthenticationService<VKToken> service;
}

提前感谢您的帮助。

【问题讨论】:

  • 不确定.. 但是您是否尝试在 VKAuthenticationService 类上添加@Service?
  • @AnkitBansal,我以前没试过,但现在可以正常工作了

标签: java spring spring-mvc generics autowired


【解决方案1】:

在您的VKAuthenticationService 上也声明@Service 怎么样

@Service(name="myService")
public class VKAuthenticationService implements AuthenticationService<VKToken> { ... }

并使用@Autowired@Qualifier 注入它

@RestController
public class VKAuthenticationController {
   @Autowired
   @Qualifier("myService")
   private AuthenticationService<VKToken> service;
}

【讨论】:

  • @Service 是否会从父母传给孩子?
  • 在接口声明@Service时,由于接口不能被实例化,所以没有用。
  • 所以就像你说的,你应该在具体类中声明@Service,并给它一个名字。默认名称将是类名,在您的情况下,它应该是 vKAuthenticationService。
  • 并且由于您将现场服务声明为接口类型,如果您的 spring 中有许多实例都实现了接口 AuthenticationService。 Spring 将不知道应该将哪一个自动连接到该字段。所以最好使用@Qualifier 来指定。
猜你喜欢
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 2016-08-17
  • 2022-01-24
  • 1970-01-01
  • 2020-01-15
  • 2016-05-26
相关资源
最近更新 更多