Spring是JavaWeb开发过程中广泛使用的框架。该框架是一个轻量级的应用框架,以其强大的功能和优异的性能受到众多开发者的喜爱。.在实际项目开发过程中,服务器分为三层:表现层(Web)、业务逻辑层(Service)、持久层(Dao)。在目前主流的开发框架中,Spring对于每一层都有其独到之处。处理方式,例如表现层提供与Struts2框架的集成,持久层提供jdbcTemplate技术,业务逻辑层提供事务管理和日志记录。一、Spring框架的组成轻量级的J2EE应用开发框架主要由:依赖注入容器、AOP实现、DAO/ORM支持、Web集成核心包:框架最基础的部分,提供IoC依赖注入特性。这里的底层概念是BeanFactory,它提供了工厂模式的经典实现以消除对编程单例模式的需要,并真正允许将依赖项和配置与编程逻辑分离。建立在Core包基础上的Context包提供了框架式的对象访问方式,有点像JNDI注册中心。Context包的特性来自于Beans包,增加了对国际化(I18N)(如资源绑定)、时间传播、资源加载方式、透明创建Context的支持。例如,JDBC是通过Servlet容器DAO提供的一个抽象层,它消除了繁琐的JDBC编码和数据库供应商特定错误代码的解析。而且JDBC包还提供了比程序化更好的声明式事务管理方式,不仅实现了特定的接口,而且适用于所有的POJO。ORM包装器为常见的对象关系映射API提供了一个集成层。使用ORM包,您可以混合使用Spring为“对象-关系”映射提供的所有功能。比如简单的声明式事务管理。Spring的AOP包提供了符合AOP(Aspect-oriented-programming)的面向切面编程。Spring的web包为web开发提供了基本的集成特性。在将Spring与WebWork或struts一起使用时,此包可以与其他框架结合使用。Spring中的MVC包装器为Web应用程序提供了模型-视图-控制器(MVC)实现。Spring的MVC框架提供了一个干净的分离模型。Spring的MVC框架在域模型代码和Web表单之间提供了一个干净的分离模型,并且还可以利用Spring框架的其他特性。迷糊点击视频:https://www.bilibili.com/video...视频介绍:本套Java视频教程主要讲解Spring4在SSM框架中的使用和应用。这套Java视频教程几乎涵盖了实际工作中可能用到的所有知识点。为以后的学习打下坚实的基础。2、Spring框架的作用在典型的应用开发过程中,开发者使用Struts、WebWork等应用框架开发前端程序,使用JDO、Hibernate等持久层框架进行数据库操作,使用SpringIoC容器(控制反转)配置和管理整个系统的组件。2.1、IoC控制反转(InversionofControl),是指创伤性编程中程序依赖的控制权从程序内部转移到程序外部,让程序员将对具体实现的依赖从程序逻辑中分离出来和管理。控制反转也体现了“面向接口编程”和调用与实现分离的设计思想。2.2.依赖注入容器在组件之间动态注入一定的依赖关系。InversionofControl又称“依赖注入”(DependencyInjectionDI)IoC/DI例子:依赖注入是Java编程思想中“面向接口编程”的体现,所以在设计程序的时候,程序所依赖的组件on是经常忌讳的,而不是直接使用具体的实现类://designinterfacepublicinterfacePersonLogic{StringsysHello();}//使用interfacepublicclassAction{publicvoidexecute(){//依赖于接口的一个实现类实例完成处理system.out.println(person.sayHello());}}2.3、IoC/DI实现2.3.1、Type1接口注入方法的调用者通过方法参数(soDependentcomponents)//在方法参数中使用组件接口publicclassDemoAction{publicvoidexecute(PersonLogicperson){//Action的函数实现依赖于通过方法参数传递的Logic对象system.out.println(person.sayHello());}}//调用方法时,从外部注入依赖组件DemoActionaction=newDemoAction();PersonLogicperson=newPersonLogicEnImpl();action.execure(person);2.3.2,Type2设置值注入供参考JavaBean的设计方法是通过setter方法从业务处理对象中传入其他组件//依赖的组件以属性的形式出现,并提供相应的getter和setter方法publicclassDemoAction{privatePersonLogicperson;//通过set值注入依赖组件publicvoidsetPerson(PersonLogicperson){this.person=person;}...//在调用DemoAction方法时通过setter方法从外部注入依赖组件action=newDemoAction();PersonLogicperson=newPersonLogicCnImpl();活动on.setPerson(person);action.execute();2.3.3、Type3构造参数注入在业务处理对象初始化阶段,其他组件都是通过构造方法设置的;初始化阶段完成后,可以直接获取完整的业务对象使用//依赖组件以属性的形式出现,并提供publicclassDemoAction{//依赖组件以属性的形式出现privatePersonLogicperson;//通过构造方法在初始化阶段获取依赖组件publicDemoActionType3(PersonLogicperson){this.person=person;}//在调用方法PersonLogicperson=newPersonLogicCnImpl时通过构造方法从外部注入依赖组件();DemoActionaction=newDemoAction(person);action.execute();2.4依赖注入实现方式比较2.4.1、Type1接口注入历史悠久,被大量容器和框架设计采用,如servlet、struts1等由于灵活性和易用性不足,目前Type2和Type3成为依赖注入模式2.4.2开发的主流,Type2集值注入类似于传统的javabean模式。对于程序员来说,通过setter方法设置依赖更加直观,自然避免了笨重臃肿的构造函数,尤其是在依赖复杂的情况下,构造函数中不需要有很多构造函数,在编码上更加简洁。在一些框架中,对构造函数有一定的限制(往往要求提供一个默认的Constructor),此时Type3方法就显得力不从心了。2.4.3、Type3构造参数注入完全符合java“构造时创建完整合法对象”的设计原则所有的依赖都集中在构造方法中由于没有可以改变依赖的setter方法,所有的组件都是内置的创建后处于相对“稳定”的状态。同时,依赖的细节也在一定程度上对外界进行了屏蔽。对于复杂的依赖,依赖注入的顺序可以由构造函数决定。三、应用3.1、所需包3.2、applicationContext.xml
