我有在构造函数中有7个参数的服务类。 6个参数属于同一类型,但限定符不同,而第7个则是其他一些服务。例如
public class MyObjectInfoService {
...
@Autowired
public MyObjectInfoService(@Qualifier("firstObjectInfo") ObjectInfo firstObjectInfo,
@Qualifier("secondObjectInfo") ObjectInfo secondObjectInfo,
...
@Qualifier("sixthObjectInfo") ObjectInfo sixtObjectInfo,
DifferentService differentService) {
//code here
}
...
}
有什么方法可以缩短它-参数更少吗?
ObjectInfo在上下文文件中指定。例如
<bean id="firstObjectInfo" parent="abstractObjectInfo">
<property name="firstProp" value="Some value"/>
<property name="secondProp" value="Some value"/>
</bean>
MyObjectInfoService类具有每个ObjectInfo的方法,其中每个方法都处理某种逻辑,然后使用特定的objectInfo作为参数来调用differentService的方法。
将来可能会有更多的ObjectInfo。
我看到的唯一解决方案是从构造函数中删除所有ObjectInfo依赖项,并在每个方法中手动初始化ObjectInfo并调用objectInfo的setter以使其处于相同状态(不幸的是,它是一个库类,没有构造函数)。
最佳答案
public MyObjectInfoService(ObjectInfo[] objectInfoArray, DIfferentService diffService) {...}
甚至更好
public MyObjectInfoService(Map<String, ObjectInfo> objectInfoMap, DIfferentService diffService) {...}
这样,您可以使用键来抓住所需的零件,并在丢失任何零件时出错。