美文网首页
spring注入

spring注入

作者: 飞絮搅青冥 | 来源:发表于2021-06-12 00:32 被阅读0次

最近有需求改造一块老代码,目的是为了把一块公司相关的特殊逻辑抽成common的一种机制。我上来想到使用类似策略模式的方法,把代码设计成一个枚举类,满足要求就可以使用相应特殊策略,如图:


枚举类

后来跟东哥交流之后,他提出由于具体执行策略的方法比较长,里面可能涉及比较多的service,使用枚举类之后就都变成静态的了,无法使用spring自动注入的功能,也不利于test的mock。在他的指导下,我使用了Spring的ApplicationContext,在service的PostConstruct注解中注册不同公司的具体策略,这样就可以使用spring来帮助自动注入,非常神奇非常强大,有空还是要好好研究下spring的框架。

public class ExceptionFeedbackSpecialServiceImpl implements ExceptionFeedbackSpecialService {
    private List<ExceptionFeedbackSpecialProcess> processList = new ArrayList<>();

    @Resource
    private ApplicationContext applicationContext;

    @Override
    public void handleSpecialFeedbackProcessor(Order order, FeedbackTriggerInfo triggerInfo) {
        for (ExceptionFeedbackSpecialProcess process : processList) {
            try {
                if (process.isMatchSpecialRequirement(order, triggerInfo)) {
                    process.handleSpecialProcessor(order, triggerInfo);
                }
            } catch (Exception e) {
                LoggerFactory.getExceptionLogger().logException(e);
            }
        }
    }

    @PostConstruct
    public void register() {
        HuntsmanExceptionFeedbackProcess huntsmanExceptionFeedbackProcess = applicationContext.getAutowireCapableBeanFactory().createBean(HuntsmanExceptionFeedbackProcess.class);
        processList.add(huntsmanExceptionFeedbackProcess);
        DcsExceptionFeedbackProcess dcsExceptionFeedbackProcess = applicationContext.getAutowireCapableBeanFactory().createBean(DcsExceptionFeedbackProcess.class);
        processList.add(dcsExceptionFeedbackProcess);
    }
}

相关文章

网友评论

      本文标题:spring注入

      本文链接:https://www.haomeiwen.com/subject/xzsbeltx.html