希望通过枚举类实现策略模式,采用这样的方式实现,但实际运用中bean无法正确初始化,导致使用时Service类为空。有人可以解释一下为什么吗
枚举类实例化时 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();
}
}
}
如有帮助,请采纳。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!