以及若干实用类-Spring框架对所有JavaBeans的管理是基于一个总入口Bean Factory机制。
BeanFactory可以管理所有应用的JavaBeans,开发人员只要将自己的JavaBeans通过配置文件告诉Bean.Factory,那么BeanFactory将会加载这些JavaBeans。
SpringAOP 提供运行时的AOP支持和原代码级的元数据支持。
SpringDAO 事务支持,/DBC包装类.DAO模式的支持。
Spring ORM 多种常见ORM技术的支持,如JDO、Hibcmam。
Spring Context对JNDI EJB JavaMail验证和UI。
Spring Web 基于Web的Context,透明的组件上传,Web开发使用类。
spingWebMVC MVC框架,JSP/ExceI/Pdf/XMlJVeloclty等多种视图技术的支持e 从图1-2可以看出,springFramework的模块性很强,你可以选择使用它的一个或多个功能,如仅使用它的BeanFactory/IOCContainer.甚至只使用它对JDBC的封装。
如果开发团队中比较熟悉Struts,则可以继续使用Struts作为Web框架,用Spring提供的JavaBean管理事务支持。
所以,虽然spring提供了One-Stop Shop的服务.但使用多少完全是开发人员的选择,这一点上不像一些别的技术,要么不用,要么都用。
BeanFactory和IOC容器 上文提到了BeanFactory和IOC容器,这是Spring中很重要的一个概念,是Spring的耩髓。
什么是BeanFactory? 经典的Factory设计模式分为工厂方法、简单工厂和抽象工厂。
把创建什么对象怎么创建的职责从类本身或是客户程序员处转到专门的工厂类中.确实提供了更好的封装和重用。
JDK中也随处可见这样的倒子,如SwingAPI中的BorderFactory。
但这一设计模式的问题在于工厂的责任过于重大——它需要了解很多被生产类的信息。
这甚至一定程度上违背了面向对象一个很基本的原则——开闭原则(Software entitiesshouldbeopenforextension,butdosedformodification.)。
一旦类发生了改变或是增加了新的类,往往工厂也得修改。
为此有人主张借助Java强大的反射功能来以不变应万变,动态生成类的实例。
比如原本的简单工厂为:public IStufffactory(String name).. if(”A”.equals(name))return… 埘”B’.equals(name))return..} 使用反射,可以简化为:public IStufffactory(String dassName).. Class cla∞=C〕ass.forName(className); Object obj=dazz.newlmtanceO; If(obj instunceofIStuff)return obj; 4} 这样工厂就只承担简单的类型判断等责任,足以应付将来的各种变化。
IOC容器 IOC,Inversion of Con油l现在被正式更名为D印endency Injecfion。
这其实也是一个很简单 的模式。
Spring,Framework就提供一个IOC conntainer,在用户需要生成一个对象时由用户接口创建,用户接口就是前面提到的BeanFactory。
对于IOC的各种变种和深层次讨论,限于篇幅不在此讨论,有兴趣的可以查看相关书籍和两上的讨论。
除去BeanFactory、IOC.spring还有很多重要的部分,就像前面的整体架构图中看到那样。
不过限于篇幅,就不再一一介绍了,SpringFramework本身已经提供很多框架性的支持和不少的实用类,它也在积极地改进和发展中,并有不少项目支持和扩展spring,如基于Spring的Rich