Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于构造函数参数的条件@Autowired_Java_Spring - Fatal编程技术网

Java 基于构造函数参数的条件@Autowired

Java 基于构造函数参数的条件@Autowired,java,spring,Java,Spring,我是spring新手,正在尝试重构一些代码,我有以下“Session.class”: 我读到使用context.getBean()是一种不好的做法,会使类变得不稳定。 根据上述内容,连接currentWallet的正确方法是什么?创建一个接口Wallet,并创建实现类,如SOAPExternalWallet,JSONExternalWallet,GuestWallet。 创建一个工厂类,然后根据类型从工厂类返回正确的实现 注入这三个值,然后根据商户类型选择要使用的值今天我有3个,但是如果明天我有

我是spring新手,正在尝试重构一些代码,我有以下“Session.class”:

我读到使用context.getBean()是一种不好的做法,会使类变得不稳定。
根据上述内容,连接currentWallet的正确方法是什么?

创建一个接口
Wallet
,并创建实现类,如
SOAPExternalWallet
JSONExternalWallet
GuestWallet


创建一个工厂类,然后根据类型从工厂类返回正确的实现

注入这三个值,然后根据商户类型选择要使用的值今天我有3个,但是如果明天我有12个类型,将它们全部连接起来不是浪费吗?虽然我很喜欢这个解决方案,但它将是最容易实现的。实际上,您依赖的是
Wallet
类,而不是
sessionId
,所以这是您在构造函数中应该实现和期望的。根据系统其余部分的定义方式,您可以有一个
钱包
原型bean,它的创建取决于
令牌
,而令牌又取决于会话ID。但是我不使用spring,我希望currentWallet字段以某种方式被@autowired…请看我的答案
public class Session {
    ...
    private Wallet currenetWallet;
    ...
    public Session(..., int sessionId, ...) {
        ...

        ThirdPartyToken token = context.getBean(ThirdPartyTokenDAO.class).getThirdPartyToken(sessionId);

        if (token.getExternalUser().getMerchant().getType().equals("SOAPMerchant")) {
            currenetWallet = (Wallet) context.getBean("SOAPExternalWallet", token);
        }
        else if (token.getExternalUser().getMerchant().getType().equals("JSONMerchant")) {
            currenetWallet = (Wallet) context.getBean("JSONExternalWallet", token);
        }
        else {
            currenetWallet = (Wallet) context.getBean("GuestWallet", 1000.0);
        }

        ...
    }   
}