Spring中的模板方法实现
在Spring的生命周期阶段,有些步骤是固定的实现,有些阶段的处理需要动态变化,对于动态的实现,可以使用模板方法的模式,再根据实际情况进行实现,逼如依赖注入阶段对@Autowired以及@Resource的解析。
代码实现:
1.自定义接口
static interface BeanPostProcessor{public void inject(Object bean);//}
}
2.自定义BeanFactory
static class MyBeanFactory{public Object getBean(){Object bean = new Object();System.out.println("构造"+bean);System.out.println("依赖注入 "+bean);//解析@Resource @Autowiredfor(BeanPostProcessor processor : processors){processor.inject(bean);}System.out.println("初始化 "+bean);return bean;}private List<BeanPostProcessor> processors = new ArrayList<>();public void addBeanPostProcessor(BeanPostProcessor processor){processors.add(processor);}}
其中构造,依赖注入以及初始化是固定的步骤,而对于依赖注入后的解析,可以通过模板方法实现。
3.主类调用
在实际使用的时候,通过匿名内部类结合Lamda表达式注入对应的Bean后处理器。
public static void main(String[] args) {MyBeanFactory beanFactory = new MyBeanFactory();beanFactory.addBeanPostProcessor(bean -> System.out.println("解析@Autowired"));beanFactory.addBeanPostProcessor(bean -> System.out.println("解析@Resource"));beanFactory.getBean();}
4.结果输出
模板方法模式的核心是“骨架不变,步骤可变”。它通过父类固定流程,子类实现细节,完美地实现了代码复用和扩展性的平衡。