Chi*_*iri 13 java soa inheritance spring late-binding
我正在使用Spring DI连接我的组件,我遇到了这个问题.
我有一个BaseService类,它有多个实现.它上面的层有一个构建器,它调用服务来获取数据来填充POJO.我需要调用的服务实现(ServiceA,ServiceB)根据我需要构建的POJO的类型进行更改.
在这种情况下,我如何自动装配服务,因为它需要后期绑定服务.我该如何处理这种情况?(Spring DI中的例子真有帮助)

我读了类似的问题,但找不到答案.我读到服务主机等SOA模式为确切的用例提供了不同的解决方案.
请帮忙.谢谢
如何使用FactoryBean:
public class BuilderFactory implements FactoryBean<Builder> {
@Autowired
private ApplicationContext appContext;
...
@Override
public Builder getObject() {
Builder builder = new Builder();
switch(something()) {
case "foo":
builder.service = new ServiceA();
break;
case "bar":
builder.service= new ServiceB();
break;
...
default:
//handle cases where it's unclear which type to create
}
return builder;
}
}
Run Code Online (Sandbox Code Playgroud)
其中Builder实例有一个public/package-private字段BaseService service,可以在其中调用getData(),buildPojos()也可以在其他任何方法中调用.
(Builder如果希望此字段为私有,也可以使用静态工厂方法进行实例化)
您可以使用ServiceLocatorFactoryBean.在你的情况下你会做这样的事情:
public interface BaseServiceLocator {
BaseService lookup(String qualifier); //use whatever qualifier type makes sense here
}
<bean id="serviceLocatorFactoryBean"
class="org.springframework.beans.factory.config.ServiceLocatorFactoryBean">
<property name="serviceLocatorInterface"
value="your.package.BaseServiceLocator" />
</bean>
Run Code Online (Sandbox Code Playgroud)
那么你的构建器看起来像这样:
public class Builder {
@Autowired
private BaseServiceLocator baseServiceLocator;
@Override
public YourReturnType businessMethod() {
SomeData data = getData();
BaseService baseService = baseServiceLocator(data.getType()); //here I am assuming that getType() is a String
//whatever
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2089 次 |
| 最近记录: |