java - 我们可以有一个工厂类作为 spring bean 并有一个工厂方法根据条件返回多个 spring bean 吗?

标签 java spring design-patterns factory

我想根据工厂类中的条件返回多个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/

相关文章:

java - 重新定位按钮并将其更改为图像?

java - EclipseLink JPA : remove and persist in the same transaction, 约束错误

java - 在 Java 中,Integer 对象是否应该优先于 int primitive(对于其他数字类型也是如此)?

java - 无法加载测试上下文

spring - Hibernate 不会在保存后保留数据

java - java中字段初始化的过程

java - Spring MVC 如何解析和验证处理程序方法参数?

oop - 如何建模进行计算并存储它们的类?

java - 关于正确使用 DAO(取两个)

php - symfony2实体的slugify方法在哪里