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

时间:2017-07-11 08:12:27

标签: java spring

我是春天新手,我试图重构一些代码,我有以下内容" Session.class":

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);
        }

        ...
    }   
}

我读到使用context.getBean()是一种不好的做法,并使该类不可测试。 根据以上内容连接currentWallet的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

创建一个界面Wallet并创建实施类,如SOAPExternalWalletJSONExternalWalletGuestWallet
创建一个工厂类,然后根据类型从工厂类返回正确的实现。