Java Spring在运行时决定bean
我有多个提供程序类(Java Spring在运行时决定bean,java,spring,spring-ioc,Java,Spring,Spring Ioc,我有多个提供程序类(Provider1和Provider2),如何根据处理器类中的输入参数决定使用哪个bean public class Processor{ private Provider provider; public void process(String providerName) throws Exception { // What should I do here to invoke either provider1 or provider2
Provider1
和Provider2
),如何根据处理器
类中的输入参数决定使用哪个bean
public class Processor{
private Provider provider;
public void process(String providerName) throws Exception {
// What should I do here to invoke either provider1 or provider2 depending on the providerName?
provider.doOperation();
}
}
public class Provider1 {
public void doOperation(Exchange exchange) throws Exception {
//Code
}
}
public class Provider2 {
public void doOperation(Exchange exchange) throws Exception {
//Code
}
}
像这样的事情怎么样 1#进入处理器类:
public class Processor{
private Map<Provider> providers;
public void process(String providerName) throws Exception {
Provider provider = providers.get(providerName);
provider.doOperation();
}
}
公共类处理器{
私人地图供应商;
公共无效进程(字符串提供程序名)引发异常{
Provider=providers.get(providerName);
provider.doOperation();
}
}
2#在spring配置中:
<bean id="provider1" class="xx.yy.zz.Provider1"/>
<bean id="provider2" class="xx.yy.zz.Provider2"/>
<bean id="processor" class="xx.yy.zz.Processor">
<property name="providers">
<map>
<entry key="provider1" value-ref="provider1" />
<entry key="provider2" value-ref="provider2" />
</map>
</property>
</bean>
现在,例如,如果您调用
processor.process(“provider1”)
它将调用provider1.doOperation()
,这就是工厂模式的情况。您可以创建(ProviderFactory
)类,注册所有提供程序并根据值获取提供程序,例如:
class ProviderFactory(){
private List<Provider> providers = new ArrayList<>();
public Provider getProvider(String input){
if(input.equals("test1")){
//Find based on criteria
return provider1;
}else if(input.equals("test2")){
//Find based on criteria
return provider2;
}
}
public void registerProvider(Provider provider){
providers.add(provider);
}
}
class ProviderFactory(){
私有列表提供程序=新的ArrayList();
公共提供程序getProvider(字符串输入){
if(input.equals(“test1”)){
//根据标准查找
退货供应商1;
}else if(input.equals(“test2”)){
//根据标准查找
退货供应商2;
}
}
公共无效注册表提供程序(提供程序){
提供者。添加(提供者);
}
}
您可以在应用程序启动时调用registerProvider
方法,并添加所需数量的提供程序。初始化后,您可以调用getProvider
方法,并根据某些条件返回适当的实例
请注意,提供者
不一定需要是列表
,它可以是任何数据结构。这取决于哪种结构最适合您的标准
的文档/有关Factory模式的更多示例