我正在开发的项目是一个在春季创建的框架,将打包为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'? –