我正在做的项目是一个在spring创建的框架,将被打包为jar用于其他项目。
现在,我正在尝试自动装配一个静态自引用字段。我已经为 AuthenticationClient 创建了一个 bean,但是 spring 仍然抱怨无法找到一个符合条件的 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-Context:我已经像这样在 servlet-context 中声明了我的 bean
<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: {}
更新:
正如我告诉你的,该项目将被打包为 jar。现在,我想在项目的控制器中获取 AuthenticationClient 的实例,其中必须导入 jar。父项目可能不是 spring 项目,所以我需要有一种方法来获取 AuthenticationClient 的实例而不自动装配它。我必须走这条路的原因。如果需要更多信息,请告诉我。
@Controller
public class Test {
@RequestMapping(value="/test")
public void test(){
AuthenticationClient client = AuthenticationClient.getAuthenticationClient();
}
}