希望通过枚举类实现策略模式,采用这样的方式实现,但实际运用中bean无法正确初始化,导致使用时Service类为空。有人可以解释一下为什么吗
2条回答 默认 最新
关注
枚举类实例化时 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(); } } }
如有帮助,请采纳。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报