我见过如下代码:
@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中修复。
答案 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