我有一个服务类,它在构造函数中有 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
}
...
}
有什么方法可以缩短它 - 减少参数吗?
ObjectInfos 在上下文文件中指定。例如
<bean id="firstObjectInfo" parent="abstractObjectInfo">
<property name="firstProp" value="Some value"/>
<property name="secondProp" value="Some value"/>
</bean>
MyObjectInfoService 类针对每个 ObjectInfo 都有方法,其中每个方法处理一些逻辑,然后以特定 objectInfo 作为参数调用不同Service 的方法。
将来可能会有更多的 ObjectInfo。
我看到的唯一解决方案是从构造函数中删除所有 ObjectInfo 依赖项,并在每个方法中手动初始化 ObjectInfo 并调用 objectInfo 的 setter 以使其处于相同状态(不幸的是,它是一个库类并且没有构造函数)。
最佳答案
public MyObjectInfoService(ObjectInfo[] objectInfoArray, DIfferentService diffService) {...}
或者更好
public MyObjectInfoService(Map<String, ObjectInfo> objectInfoMap, DIfferentService diffService) {...}
这样您就可以使用 key 来获取所需的零件,并在丢失时出错。
关于java - 构造函数注入(inject): How to reduce amount of parameters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22484783/