引言
1.EJB存在的问题
重量级的框架,运行环境苛刻+代码移植性差——spring的产生
2.什么是spring
轻量级的JavaEE解决方案,整合众多优秀的设计模式
轻量级
1.对于环境没有额外的要求
2.代码移植性好,不需要事先额外的接口
JavaEE 分层开发
许多框架各自解决某一层的问题
spring是一个解决方案,对每一个层次都有自己的解决方案。
整合设计模式
- 工厂
- 代理
- 模板
- 策略
合理的使用了设计模式
3 设计模式
- 广义概念:面向对象设计中,解决特定问题的经典代码
- 狭义概念:GOF4人帮定义的23种设计模式:工厂、适配器、装饰器、门面、代理、模板…
4 工厂模式
4.1 什么是工厂设计模式
- 通过工厂类创建对象
- 好处:解耦合
耦合:一方改变影响另一方
耦合问题:不利于diamante维护
简单:把接口的实现类硬编码在程序中。new - 解耦方法:
(1)将实现类替换为工厂的get对象方法,在工厂的方法中new对象。(在工厂类还是有耦合)
(2)在工厂类中通过反射创建对象。在这一步,实际上这个全限定类名还是硬编码,修改还是要修改代码。
(3)用配置文件解决这个全限定类名的修改问题。properties是一个特殊的map,可以用get获取内容。
最后使用反射+配置文件实现了最后一步的解耦。如果需要更改为新的实现类,增加这个类,然后修改配置文件即可。
4.2 简单工厂的设计
如上
4.3 通用的工厂设计
如果只用简单的工厂,工厂会越来越多。
不需要为每一类对象都设计一个工厂方法。冗余很多,所以需要通用的工厂方法。
根据共性设计出通用的getbean方法。通过参数传入全限定类名。
返回时进行强制类型转换,得到想要的对象
4.4 通用工厂的使用方式
- 定义类型(类)
- 通过配置文件的配置告知工厂全限定类名(properties)
- 通过工厂获得类的对象(工厂通过反射创建)
5 总结
- spring的本质:工厂 ApplicationContext(applicationContext.xml)