Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring中为第三方库使用多个实现:无法找到干净的方法_Java_Spring_Spring Aop_Spring Ioc - Fatal编程技术网

Java 在spring中为第三方库使用多个实现:无法找到干净的方法

Java 在spring中为第三方库使用多个实现:无法找到干净的方法,java,spring,spring-aop,spring-ioc,Java,Spring,Spring Aop,Spring Ioc,我正在实现一个自定义身份验证提供程序,它必须对用户进行身份验证和授权(通过一次性令牌/密码)。已经有一个用于此目的的服务器,并且我们已经提供了一个客户端API,用于在我们的应用程序中调用此身份验证/授权服务器 出于商业原因,我们可以在测试环境中复制该身份验证服务器的测试设置,因此,当我们部署到我们的环境中时,我们必须以某种方式模拟该客户端API,而当我们交付给客户时,则使用实际的impl。我一直在创建一种干净的方法,将这个客户端API作为bean注入到我的spring应用程序中 他们提供的客户机

我正在实现一个自定义身份验证提供程序,它必须对用户进行身份验证和授权(通过一次性令牌/密码)。已经有一个用于此目的的服务器,并且我们已经提供了一个客户端API,用于在我们的应用程序中调用此身份验证/授权服务器

出于商业原因,我们可以在测试环境中复制该身份验证服务器的测试设置,因此,当我们部署到我们的环境中时,我们必须以某种方式模拟该客户端API,而当我们交付给客户时,则使用实际的impl。我一直在创建一种干净的方法,将这个客户端API作为bean注入到我的spring应用程序中

他们提供的客户机API本质上是一个带有公共类(没有接口)和一些公共静态方法的单包JAR,没有接口可以用来注入这个客户机API或虚拟实现

这就是我计划要做的

创建一个接口

public interface ClientAPIWrapper {

}
然后注入它的不同实现

i、 e

但后来我意识到,这个接口的注入类型将不允许访问原始客户端API类的方法

@Autowired
private ClientAPIWrapper clientApiBean
我想要实现的是将原始的客户机API类用作bean,或者使用任何一种实现将伪数据透明地返回给类的伪bean

差不多

public MyAuthenticationProvider

@Autowired
private ClientAPI clientApi

如何实现这一点?

这里的问题是API只包含静态方法(如果我正确理解了您的问题的话)。最干净的解决方案(但仍然很难看)是为API编写一个接口,并使用委托给真实API的非静态方法编写一个facade类。对于模拟,请创建接口的第二个实现。

这里的问题是API只包含静态方法(如果我正确理解了您的问题的话)。最干净的解决方案(但仍然很难看)是为API编写一个接口,并使用委托给真实API的非静态方法编写一个facade类。对于模拟,请创建接口的第二个实现。

您使用的是哪个版本的Spring?另外,SpringJava配置还是XML?Spring3.2.4.RELEASE,XML配置您使用的是哪个版本的Spring?另外,Spring Java Config或XML?Spring 3.2.4.RELEASE,XML configI最终选择为原始API创建子类,一旦调用实际的超类方法,其他重写方法发送虚拟响应,现在使用@Qualifier annotation注入它们。我最终选择为原始API创建子类,一旦调用了实际的超类方法,其他方法就会重写方法以发送虚拟响应,现在使用@Qualifier注释注入它们。
@Autowired
private ClientAPIWrapper clientApiBean
public MyAuthenticationProvider

@Autowired
private ClientAPI clientApi