公司工厂模式的使用
公司一个酒店有多个供应商, 采用了设计模式,
接口是 HotelDataInterface , 4 个实现类.
使用 getHotelDataService(String code)? 来得到对应的供应商的实现类.
?
?
TheApplicationContext
beans包提供了以编程的方式管理和操控bean的基本功能,而context包下的ApplicationContext以一种更加面向框架的方式增强了BeanFactory的功能。多数用户可以采用声明的方式来使用ApplicationContext,甚至不用手动创建它,而通过ContextLoader这样的支持类,把它作为J2EE web应用的一部分自动启动。当然,我们仍然可以采用编程的方式创建一个ApplicationContext。context包的核心是
ApplicationContext接口。它由BeanFactory接口派生而来,因而提供了BeanFactory所有的功能。为了以一种更向面向框架的方式工作以及对上下文进行分层和实现继承,context包还提供了以下的功能:
MessageSource, 提供国际化的消息访问资源访问,如URL和文件
事件传播,实现了
ApplicationListener接口的bean载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层
简单的说:除非你有更好的理由,否则尽量使用
ApplicationContext,下面是对于哪些"为什么"等等更深入的建议
ApplicationContext包含BeanFactory的所有功能。通常建议比BeanFactory优先,除非有一些限制的场合如字节长度对内存有很大的影响时(Applet)。然后,绝大多数"典型的"企业应用和系统,ApplicationContext就是你需要使用的。Spring2.0及以上版本,大量使用了link linkend="beans-factory-extension-bpp">BeanPostProcessor扩展(以便应用代理等功能),如果你选择BeanFactory则无法使用相当多的支持功能,如事务和AOP,这可能会导致混乱,因为配置并没有错误。?
?
?
在服务器启动时, 系统调用
/** 加载服务商 */
??? @PostConstruct
??? public void init()??
@PostConstruct注解
@PostConstruct是Java EE 5引入的注解,Spring允许开发者在受管Bean中使用它。当DI容器实例化当前受管Bean时,@PostConstruct注解的方法会被自动触发,从而完成一些初始化工作。
?
?
初始化类 .? 其中调用了Spring的
context.getBeansOfType(HotelDataInterface.class);
这个方法可以根据接口自动寻找所有的实现类,封装到MAP中 , key是类名, (XXXImpl), value是实现类。
接口中, 定义这个方法, getCode() 把相应的自己定义的 KEY 返回
?
?
?
?
?
?
?