Spring 每个用户实现不同的业务规则

Spring 每个用户实现不同的业务规则,spring,rules,Spring,Rules,我正在维护使用Java中if…else语句的软件,以便为每个用户实现不同的业务规则。我知道这并不是实施这一要求的最佳方式 我的一个想法是使用Spring并使用applicationContext.getBeanBenName+user.getkey。这将允许在业务逻辑中可能出现差异的地方动态加载bean。这里唯一不好的是,主代码与Spring绑定,我真的认为这没什么大不了的 我的问题是,这可以通过Drools、Mule等实现吗?我对这两个框架都不太了解,但可以就采用哪种方法提供一些建议 谢谢 我

我正在维护使用Java中if…else语句的软件,以便为每个用户实现不同的业务规则。我知道这并不是实施这一要求的最佳方式

我的一个想法是使用Spring并使用applicationContext.getBeanBenName+user.getkey。这将允许在业务逻辑中可能出现差异的地方动态加载bean。这里唯一不好的是,主代码与Spring绑定,我真的认为这没什么大不了的

我的问题是,这可以通过Drools、Mule等实现吗?我对这两个框架都不太了解,但可以就采用哪种方法提供一些建议

谢谢

我的问题是,这可以通过Drools、Mule等实现吗

这是一个非常开放的问题,可能更适合程序员。看看这本书

我的一个想法是使用Spring和 applicationContext.GetBeanBenName+user.getkey。这会 允许在可能存在差异的点动态加载bean 发生在业务逻辑中。这里唯一不好的是 代码和Spring绑定在一起,我真的不认为Spring是个大问题 成交

您可以使逻辑可插拔,而无需将自己绑定到Spring。使用applicationContext.getBean违背了依赖注入的目的,因此我不建议这样做。试着这样做:

定义封装用户特定逻辑的接口 为每种类型的用户创建接口的实现 将接口的所有实现自动连接到需要使用它们的bean中。 需要时,根据用户的类型选择实现。 我对这两个框架都不太了解,但可以在这方面提供一些建议 走哪条路

首先,将逻辑隐藏在接口后面,并将特定于用户的内容封装到单独的类中。一旦一切都取决于界面,如果以后需要将特定于用户的内容移动到规则引擎,那么在不破坏应用程序其余部分的情况下,这样做应该很容易

代码示例:

public enum UserType {
    FOO, BAR
}

public interface UserStrategy {
    public void doStuff();
    public UserType getUserType();
    }

@Component
public class FooUserStrategy implements UserStrategy {
    public void doStuff() {
        // foo specific stuff
    }

    public UserType getUserType() {
        return UserType.FOO;
    }
}

@Component
public BarUserStrategy implements UserStrategy {
    public void doStuff() {
        // bar specific stuff
    }

    public UserType getUserType() {
        return UserType.BAR;
    }
}

@Service
public class ClassThatUsesStrategies {

    private Map<UserType, UserStrategy> map = new HashMap<>();

    public void doUserTypeSpecificStuffForUser(User user) {
        UserStrategy s = map.get(user.getUserType);
        s.doStuff();
    }

    @Autowired
    public void setUserStrategies(List<UserStrategy> strategies) {
        for (UserStrategy current : strategies) {
            map.put(current.getUserType(), current);
        }
    }

}