java - 构造函数注入(inject): How to reduce amount of parameters?

标签 java spring dependency-injection

我有一个服务类,它在构造函数中有 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/

相关文章:

java - 有没有办法检查正则表达式是否代表 url

java - java 中的 toString - System.out.println 与 Android 中的 log

json - Typescript 无法从 JSON 数据中读取 map<string,string>

design-patterns - 依赖注入(inject) : How To Overcome Cyclic Dependencies

java - 可以焊接 (JSR-299) 和 JBoss AS 5.1 吗?

java - commons-exec : hanging when I call executor. 执行(命令行);

java - 本地主机 Java Applet 不断崩溃

java - 当响应不包含媒体类型 header 时,Spring WebClient 抛出 "Only one connection receive subscriber allowed"

java - PostgreSQL, hibernate : Moving contents of db to text file/XML file for storage purposes

c# - 从静态方法中使用 IoC 容器解析类型