0

我想用spring boot在微服务环境中实现FusionAuth,所以我想为java制作一个FusionAuth Client的单例。apiKey, baseUrl但是我在静态上下文中使用变量时出错。

@Configuration
public class FusionAuthClientConfig {

    private static FusionAuthClient INSTANCE = null;

    @Value("${fusionAuth.apiKey}")
    private String apiKey;

    @Value("${fusionAuth.baseUrl}")
    private String baseUrl;

    public static FusionAuthClient getInstance() {
        if(INSTANCE == null)
            INSTANCE = new FusionAuthClient(apiKey, baseUrl);

        return INSTANCE;
    }
}

无论如何,是否使用了单例类的这个范围?我的意思是对于并发环境和性能,我应该为每个请求使用客户端来融合身份验证吗?

4

1 回答 1

0

private static FusionAuthClient INSTANCE = null的是不必要的。默认情况下,bean 的范围是单例。@see:Bean 范围

由于您使用的是@Configuration,您需要做的就是将您的更改FusionAuthClientConfig为以下内容,您将能够在应用程序的其他地方将其作为@Autowired 属性引用。

@Configuration
public class FusionAuthClientConfig {

    @Value("${fusionAuth.apiKey}")
    private String apiKey;

    @Value("${fusionAuth.baseUrl}")
    private String baseUrl;

    @Bean
    public FusionAuthClient fusionAuthClient() {
        return new FusionAuthClient(apiKey, baseUrl);
    }
}

现在您的fusionAuthClientbean 可以像这样在其他地方引用:

@Service
//or @Component etc
public class MyService {
    private final FusionAuthClient fusionAuthClient;

    public MyService(FusionAuthClient fusionAuthClient) {
        this.fusionAuthClient = fusionAuthClient;
    }

    public void doTheThing() {
        // use this.fusionAuthClient
    }
}
于 2020-02-21T11:44:33.610 回答