gpt4 book ai didi

java - 如何避免在java文件中硬编码字符串?

转载 作者:行者123 更新时间:2023-12-02 04:27:25 26 4
gpt4 key购买 nike

我正在使用 Spring 。我需要根据字符串返回对象。我有以下代码。

public class DaoFactoryImpl implements DaoFactory {

private String dbType;

private OrganizationActions organizationActions;
private ProductActions productActions;

public void setOrganizationActions(OrganizationActions org){
this.organizationActions = org;
}

public void setProductActions(ProductActions prodActions){
this.productActions = prodActions;
}

public void setDbType(String dbType){
this.dbType = dbType;
}

@Override
public OrganizationActions getDaoObject() {
if(dbType.equalsIgnoreCase("Oracle")){
return organizationActions;
}else if(dbType.equalsIgnoreCase("DB2")){
return productActions;
}
return null;
}
}

Spring_congig.xml:

<util:properties id="configProps"
location="classpath:config/config.properties" />

<bean id="orgService" class="com.sample.OrganizationMongoService">

</bean>


<bean id="productService" class="com.sample.ProductMongoService"/>

<bean id="daoFactory" class="com.sample.factory.DaoFactoryImpl">
<property name="dbType" value="${dbName}"/>
<property name="organizationActions" ref="orgService"/>
<property name="productActions" ref="productService"/>
</bean>

我在 config.properties 文件中指定dbName。我在 DaoFactoryImpl 类中硬编码了相同的 dbName(Oracle、DB2)。如何避免在代码中硬编码Oracle、DB2。是否有在 spring xml 文件中指定此条件?

最佳答案

尝试在 spring 配置中创建一个 map 并使用它来查找正确的实例。例如:

<bean id="daoFactory" class="com.sample.factory.DaoFactoryImpl">
<property name="dbType" value="${dbName}"/>
<property name="typeMap">
<map>
<entry key="Oracle" value-ref="orgService"/>
<entry key="DB2" value-ref="productService"/>
</map>
<property>
</bean>

然后在你的工厂方法中进行查找:

public void setTypeMap(Map<String,Actions> typeMap){
this.typeMap = typeMap;
}

@Override
public OrganizationActions getDaoObject() {
return typeMap.get(dbType);
}

关于java - 如何避免在java文件中硬编码字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31967758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com