我正在開發的項目是一個在春季創建的框架,將打包爲jar用於其他項目。春季:自動裝配靜態自引用不起作用
現在,我正在嘗試autowire一個靜態自引用字段。我爲AuthenticationClient創建了一個bean,但仍然抱怨無法找到符合條件的自動裝配bean。我明白布線靜電領域不是一個好的選擇。但我沒有任何替代品。
public class AuthenticationClient {
private static AuthenticationClient client;
private @Autowired KerberosAPI kerberosAPI;
private @Autowired KerberosSessionManager kerberosSessionManager;
public AuthenticationClient getAuthenticationClient(){
return client;
}
@Autowired
public void setAuthenticationClient(AuthenticationClient client){
AuthenticationClient.client = client;
}
}
Servlet的語境:我宣佈我在servlet上下文內豆類這樣
<beans:bean class="com.security.kerberos.KerberosAPIImpl" />
<beans:bean class="com.security.kerberos.model.KerberosSessionManager"/>
<beans:bean class="com.security.rest.client.AuthenticationClient" />
詳細的異常位置:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.security.rest.client.AuthenticationClient] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
更新:
由於我告訴過你項目將被打包成罐子。現在,我想在必須導入inn的項目的控制器中獲得AuthenticationClient的實例。父項目可能不是一個春季項目,所以我需要有一種方法來獲取AuthenticationClient的實例,而不需要自動裝配它。之所以我必須走這條路。請讓我知道是否需要更多信息。
@Controller
public class Test {
@RequestMapping(value="/test")
public void test(){
AuthenticationClient client = AuthenticationClient.getAuthenticationClient();
}
}
哪裏是被初始化AuthenticationClient'的'第一個實例?春天是否意識到這種情況?它似乎並不知道它的任何實例。 (順便說一句,以這種方式設置靜態實例非常奇怪) – jbx
我不明白你的意思是什麼? 我已經包含了我在我的servlet-context –
中聲明的bean,其類型完全是靜態字段?你自己的類'AuthenticationClient'? –