我想根据工厂类中的条件返回多个spring bean。
这是一个好的做法吗?
有没有更好的方法来编写下面的代码? 还有其他适合这里的设计模式吗?
下面是代码片段:
package com.test;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class InstanceFactory {
@Resource(name = "instance1")
private Instance instance1;
@Resource(name = "instance2")
private Instance instance2;
public Instance getService(Condition condition) {
if (condition.one() && condition.two()) {
return instance2;
} else {
return instance1;
}
}
}
最佳答案
这取决于你想达到什么目的。工厂模式旨在创建对象,但您返回的是已经在其他地方创建的对象(在本例中为 Spring)。如果你想创建将由 Spring 管理的 bean,有几种方法:
@Conditional(YourConditionImplementation.class):添加到 @Configuration 注释类的方法上的此注释将允许您在满足给定条件时创建一个 bean。此处示例:https://javapapers.com/spring/spring-conditional-annotation/
您也可以使用 BeanFactory 将 bean 的定义 (DefinitionBean) 注入(inject)到容器中。此处示例:https://www.logicbig.com/tutorials/spring-framework/spring-core/bean-definition.html
现在,如果您想要一个对象来确定哪个实例类型的对象更适合某些需要,那么您的方法就可以了,但从技术上讲它不是工厂:)
关于java - 我们可以有一个工厂类作为 spring bean 并有一个工厂方法根据条件返回多个 spring bean 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55633296/