枚举类反射注入为空,策略模式如何实现

希望通过枚举类实现策略模式,采用这样的方式实现,但实际运用中bean无法正确初始化,导致使用时Service类为空。有人可以解释一下为什么吗

img

枚举类实例化时 bean 还没有创建,因此获取不到 bean,可以尝试使用如下的方式根据 code 获取 RegisterService 示例。

接口定义:

public interface RegisterService {

    /**
     * 是否支持给定的 code
     *
     * @param code
     * @return
     */
    boolean support(String code);

    /**
     * 执行注册
     */
    void register();
}

接口实现:

@Service
public class EmailRegisterServiceImpl implements RegisterService {

    @Override
    public boolean support(String code) {
        return "email".equals(code);
    }

    @Override
    public void register() {

    }
}

@Service
public class PhoneRegisterServiceImpl implements RegisterService {
    @Override
    public boolean support(String code) {
        return "phone".equals(code);
    }

    @Override
    public void register() {

    }
}

接口示例获取:

@Component
public class RegisterServiceFactory {

    @Autowired
    private List<RegisterService> registerServiceList;

    public RegisterService getRegisterService(String code) {
        for (RegisterService registerService : registerServiceList) {
            if (registerService.support(code)) {
                return registerService;
            }
        }
        return null;
    }

}

测试类:

@Service
public class TestService {

    @Autowired
    private RegisterServiceFactory registerServiceFactory;

    public void regiser() {
        RegisterService registerService = registerServiceFactory.getRegisterService("email");
        if (registerService != null) {
            registerService.register();
        }
    }
}

如有帮助,请采纳。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632