我有在构造函数中有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) {...}


这样,您可以使用键来抓住所需的零件,并在丢失任何零件时出错。

07-24 09:26