本文概览:常用的IOC的编程模式,如工厂模式。
1 工厂模式
IOC的常用模式都是使用ApplicationContetxtAware和InitializingBean模式来实现一个工厂模式,如下一个实例
1、定义一个Processor接口
1 2 3 4 |
public interface Processor { String getProssorKey(); void process(); } |
2、实现两个具体的Processor
ProcssA如下:
1 2 3 4 5 6 7 8 9 10 |
@Component public class ProcessorA implements Processor { public String getProssorKey() { return "A"; } public void process() { System.out.printf("A process"); } } |
ProcesB如下:
1 2 3 4 5 6 7 8 9 10 |
@Component public class ProcessorB implements Processor { public String getProssorKey() { return "B"; } public void process() { System.out.printf("B process"); } } |
3、定义一个工厂模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@Component public class ProcessorSelector implements ApplicationContextAware, InitializingBean { private ApplicationContext applicationContext; private Map<String, Processor> factory = Maps.newHashMap(); public Processor select(String key) { return factory.get(key); } public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } public void afterPropertiesSet() throws Exception { List<String> beanNames = Lists.newArrayList( applicationContext.getBeanNamesForType(Processor.class)); for (String beanName : beanNames) { Processor processor = (Processor) applicationContext.getBean(beanName); factory.put(processor.getProssorKey(), processor); } } } |
4、测试如下
1 2 3 4 5 6 7 8 |
public class Main { public static void main(String[] args) { ApplicationContext applicationContext = new AnnotationConfigApplicationContext(FirstXml.class); ProcessorSelector processorSelector = (ProcessorSelector) applicationContext.getBean("processorSelector"); Processor processor = processorSelector.select("A"); processor.process(); } } |
执行结果如下:
A process
对于一个IOC工程搭建,参考: