0

我正在做的项目是一个在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();
}

}

4

1 回答 1

2

尝试使用@Resource注释。

@Autowired在寻找候选人时跳过带注释的 bean 本身。

请参阅如何在同一个 bean 中自动装配 bean

于 2013-07-24T19:28:05.043 回答