无法使用IntelliJ中的方法级注释@Qualifier进行自动装配

时间:2016-11-09 14:22:23

标签: java spring

我见过如下代码:

@Bean
@Qualifier("fooService")
public Foo fooService(Env env) {
  return new Foo(env);
}

@Bean
public Bar barService(@Qualifier("fooService") Foo foo) {
  return Bar(foo);
}

IntelliJ将此布线标记为错误,特别是第2行,并出现以下错误:

Could not autowire. Qualified bean must be of 'Env' type

然而,程序启动正常。

为什么这是自动装配错误?

更新:事实证明这是一个IntelliJ问题,并且上述内容根据Spring documentation有效。指出这是一个IntelliJ问题的线索是错误信息;它似乎表明@Qualifier注释附加到Env参数,而不是 @Override public void setVideoURI(Uri uri) { super.setVideoURI(uri); try { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null, null); MySSLSocketFactory sf = new MySSLSocketFactory(trustStore); sf.setHostnameVerifier(MySSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); sf.fixHttpsURLConnection(); HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier); } catch (Exception e) { e.printStackTrace(); } } 。我使用IntelliJ 15.0.6对此进行了测试,并且似乎已在2016.2.1中修复。

1 个答案:

答案 0 :(得分:1)

来自@Qualifier Javadoc ......

  

此注释可以在字段或参数上用作限定符   自动装配时的候选豆。它也可以用于注释其他   自定义注释,然后可以用作限定符。

默认情况下,Spring按名称"自动跟踪"而不是"类型"。所以,如果你有......

@Bean public Object myObject() {...}

... bean的隐含名称是" myObject"你会把它作为像这样的合作者自动装配......

@Autowire Object myObject

但是,如果你想为你的bean命名一些不同的东西......

@Bean(name="foo") public Object myObject() {...}

您可以重命名协作者......

@Autowire Object foo

或者您可以使用@Qualifier ...

@Qualifier("foo") @Autowire Object myObject