希望通过枚举类实现策略模式,采用这样的方式实现,但实际运用中bean无法正确初始化,导致使用时Service类为空。有人可以解释一下为什么吗
枚举类反射注入为空,策略模式如何实现
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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(); } } }
如有帮助,请采纳。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥30 关于<main>标签页面跳转的问题
- ¥80 部署运行web自动化项目
- ¥15 腾讯云如何建立同一个项目中物模型之间的联系
- ¥30 VMware 云桌面水印如何添加
- ¥15 用ns3仿真出5G核心网网元
- ¥15 matlab答疑 关于海上风电的爬坡事件检测
- ¥88 python部署量化回测异常问题
- ¥30 酬劳2w元求合作写文章
- ¥15 在现有系统基础上增加功能
- ¥15 远程桌面文档内容复制粘贴,格式会变化