热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spring框架入门指南:专为新手打造的详细学习笔记

Spring框架是JavaWeb开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。

Spring 是 Java Web 开发过程中使用较为广泛的框架,该框架是一个轻量级的应用框架,其强大的功能以及卓越的性能而受到众多开发人员的喜爱。

在实际项目开发过程中,将服务器分为三层:表现层(Web)、业务逻辑层(Service)、持久层(Dao),在目前主流的开发框架中,Spring对每一层都有独到的处理方式,如在表现层在表现层提供了与 Struts2 框架的整合,持久层中提供了jdbcTemplate技术,在业务逻辑层提供了事物管理和日志记录等。

 


一、Spring框架的组成

 


  • 轻量级J2EE应用开发框架
  • 主要构成:依赖注入容器,AOP实现、DAO/ORM支持、Web集成
  • Core封装包:框架的最基础部分,提供IoC依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许从成程序逻辑中分分离出依赖关系和配置。
  • 构建与Core封装包基础上的Context封装包,提供了一种框架式的对象访问方法,有些像JNDI注册器。Context封装包的特性来自于Beans封装包,并添加了对国际化(I18N)的支持(如资源绑定)时间传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器
  • DAO提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。并且,JDBC封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJO都适用。
  • ORM封装包提供了常用的“对象-关系”映射API的集成层。利用ORM封装包,可以混合使用所有Spring提供的特性进行”对象-关系“映射。如简单声明性事务管理。
  • Spring的AOP封装包提供了符合AOP(Aspect—oriented-programming)面向切面编程。
  • Spring的Web包提供了基础的针对web开发的集成特性,当与WebWork或struts一起使用Spring时,这个包可以与其他框架结合。
  • Spring中的MVC封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架提供了一种清晰的分离模型。Spring的MVC框架提供了一种清晰的分离模型,在领域模型代码和web form之间,并且还可以借助Spring框架的其他特性。

有什么问题的可以通过视频来解决:​ ​​https://www.bilibili.com/video/BV1nz4y1d7uy​​​​icon-default.png?t=M0H8https://www.bilibili.com/video/BV1nz4y1d7uy%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B视频简介:

本套Java视频教程主要讲解了Spring4在SSM框架中的使用及运用方式。本套Java视频教程内容涵盖了实际工作中可能用到的几乎所有知识点。为以后的学习打下坚实的基础。



 


二、Spring框架的作用

典型的应用程序开发过程中,开发人员使用Struts、WebWork等应用程序框架开发前端程序,而采用JDO、Hibernate等持久层框架进行数据库操作,使用Spring IoC容器(控制反转)对整个系统中的组件进行配置和管理。

2.1、IoC

控制反转(Inversion of Control),指的是将创痛编程方式中的程序依赖关系的控制权从程序内部转移到程序外部,允许程序员从程序逻辑中分离出对具体实现的依赖和管理。

控制反转也体现了”面向接口编程”、分离调用与实现的设计思想。

2.2、依赖注入

由容器动态地将某种依赖关系注入到组件之间。

控制反转也称为”依赖注入“(Dependency Injection DI)

IoC/DI示例: 

依赖注入是Java编程思想中”面向接口编程“的体现,因此在设计程序是,对于程序所依赖的组件往往以忌口的形式出现,而不直接使用具体的实现类:

//设计接口
public interface PersonLogic{
String sysHello();
}
//使用接口
public class Action{
public void execute(){
//依赖接口的某个实现类的实例来完成处理
system.out.println(person.sayHello());
}
}

2.3、IoC/DI的实现方式
2.3.1、Type1 接口注入

方法的调用者通过方法参数提供一个接口的实现类(所依赖的组件)

//在方法参数中使用组件接口
public class DemoAction{
public void execute(PersonLogic person){
//Action的功能实现依赖于通过方法参数传递的Logic对象
system.out.println(person.sayHello());
}
}
//调用方法时,从外部注入所依赖的组件
DemoAction action = new DemoAction();
PersonLogic person = new PersonLogicEnImpl();
action.execure(person);

2.3.2、Type2 设值注入

借鉴JavaBean的设计方法,把业务处理对象所以来的其它组件通过setter方法传递进来

//所依赖的组件以属性的形式出现,并提供相应的getter、setter方法
public class DemoAction{
private PersonLogic person;
//通过设值注入所依赖的组件
public void setPerson(PersonLogic person){
this.person = person;
}
....
//调用方法时通过setter方法从外部注入所依赖的组件
DemoAction action = new DemoAction();
PersonLogic person = new PersonLogicCnImpl();
action.setPerson(person);
action.execute();

2.3.3、Type3 构造参数注入

在业务处理对象初始化的阶段,就将所以来的其他组件通过构造方法设置好;在初始化阶段完成之后,就可以得到一个完整的业务对象直接使用。

//所依赖的组件以属性的形式出现,并在构造方法中提供
public class DemoAction{
//所依赖的组件以属性的形式出现
private PersonLogic person;
//通过构造方法在初始化阶段获得所依赖的组件
public DemoActionType3(PersonLogic person){
this.person = person;
}
//调用方法时通过构造方法从外部注入所依赖的组件
PersonLogic person = new PersonLogicCnImpl();
DemoAction action = new DemoAction(person);
action.execute();

2.4 依赖注入实现方式的比较
2.4.1、Type1 接口注入

历史悠久,在大量的容器、框架设计中都有采用,例如servlet,struts1等

灵活性、易用性不足,目前依赖注入模式的开发中Type2、Type3成为主流

2.4.2、Type2 设值注入

近似于传统的javabean模式,对于程序员来说,通过setter方法来设置依赖关系更加直观、自然

避免了庞大臃肿的构造函数,特别是在依赖关系复杂的情况下不用在构造函数中出现众多的构造函数,在编码中更为简洁

在某些框架中,对构造函数有一定的限制(往往要求提供一个默认的构造函数)这时Type3方式就显得无能为力。

2.4.3、Type3 构造参数注入

完全符合”在构造期即创建一个完整的、合法的对象“的java设计原则

所有的依赖关系在构造方法中集中体现

由于没有setter方法能改变依赖关系,所有组建在创建之后处于相对”稳定“状态。同时在一定程度上也对外界屏蔽了依赖关系的细节。

对于复杂的依赖关系,可以通过构造方法决定依赖关系注入的顺序。

三、应用
3.1、所需包

3.2、applicationContext.xml  



四、总结


  • Spring框架的产生
  • Spring框架由依赖注入容器、AOP实现,DAO/ORM支持、Web集成等多个部分组成。
  • Spring在应用程序中对整个应用系统中的组件进行配置和管理
  • IoC将传统编程方式中的程序依赖关系的控制权从程序内部转移到程序外部,从程序逻辑中分离出对具体实现的依赖和管理。
  • DI的实现方式中,接口注入出现最早,但因为灵活性、易用性方面的不足,IoC领域不再是主流选择。
  • Type2设值注入和Type3构造参数注入都是目前比较主流的做法,但是由于实现方法的不同,在运用中也有各自的优点。

 


推荐阅读
  • 本文将介绍一种扩展的ASP.NET MVC三层架构框架,并通过使用StructureMap实现依赖注入,以降低代码间的耦合度。该方法不仅能够提高代码的可维护性和可测试性,还能增强系统的灵活性和扩展性。通过具体实践案例,详细阐述了如何在实际开发中有效应用这一技术。 ... [详细]
  • 浅析PHP中$_SERVER[
    在PHP后端开发中,`$_SERVER["HTTP_REFERER"]` 是一个非常有用的超级全局变量,它可以获取用户访问当前页面之前的URL。本文将详细介绍该变量的使用方法及其在不同场景下的应用,如页面跳转跟踪、安全验证和用户行为分析等。通过实例解析,帮助开发者更好地理解和利用这一功能。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 本课程详细介绍了如何使用Python Flask框架从零开始构建鱼书应用,涵盖高级编程技巧和实战项目。通过视频教学,学员将学习到Flask的高效用法,包括数据库事务处理和书籍交易模型的实现。特别感谢AI资源网提供的课程下载支持。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • Java中高级工程师面试必备:JVM核心知识点全面解析
    对于软件开发人员而言,随着技术框架的不断演进和成熟,许多高级功能已经被高度封装,使得初级开发者只需掌握基本用法即可迅速完成项目。然而,对于中高级工程师而言,深入了解Java虚拟机(JVM)的核心知识点是必不可少的。这不仅有助于优化性能和解决复杂问题,还能在面试中脱颖而出。本文将全面解析JVM的关键概念和技术细节,帮助读者全面提升技术水平。 ... [详细]
  • 全面解析:Hadoop技术栈中的Linux操作系统概览
    全面解析:Hadoop技术栈中的Linux操作系统概览 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 成功实现Asp.Net MVC3网站与MongoDB数据库的高效集成
    我们成功地构建了一个基于Asp.NET MVC3框架的网站,并实现了与MongoDB数据库的高效集成。此次更新不仅完善了基本的创建和显示功能,还全面实现了数据的增删改查操作。在创建功能方面,我们修复了之前代码中的错误,确保每个属性都能正确生成。此外,我们还对数据模型进行了优化,以提高系统的性能和稳定性。 ... [详细]
  • 如何构建基于Spring MVC框架的Java Web应用项目
    在构建基于Spring MVC框架的Java Web应用项目时,首先应创建一个新的动态Web项目。接着,需将必要的JAR包导入至WebContent/WEB-INF/lib目录下,确保包括Spring核心库及相关依赖。如遇缺失的JAR包,可向社区求助或通过Maven等工具自动下载。正确配置后,即可开始搭建应用结构与功能模块。 ... [详细]
  • HTTP协议作为互联网通信的基础,其重要性不言而喻。相比JDK自带的URLConnection,HttpClient不仅提升了易用性和灵活性,还在性能、稳定性和安全性方面进行了显著优化。本文将深入解析HttpClient的使用方法与技巧,帮助开发者更好地掌握这一强大的工具。 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • 深入解析:RKHunter与AIDE在入侵检测中的应用与优势
    本文深入探讨了RKHunter与AIDE在入侵检测领域的应用及其独特优势。通过对比分析,详细阐述了这两种工具在系统完整性验证、恶意软件检测及日志文件监控等方面的技术特点和实际效果,为安全管理人员提供了有效的防护策略建议。 ... [详细]
  • 优化Oracle数据库日志功能的关闭方法与实践
    在优化Oracle数据库日志功能的过程中,关闭不必要的日志记录是一项重要任务。本文探讨了Oracle 11g中日志路径的配置和管理,特别是针对常用的警报日志(alert log)。通过合理配置 `alert_$ORACLE_SID.log` 文件,可以有效减少日志文件的大小和提高系统性能。此外,文章还介绍了如何通过调整参数和使用脚本自动化日志管理,进一步提升数据库的稳定性和维护效率。 ... [详细]
  • 深入解析 Spring MVC 的核心原理与应用实践
    本文将详细探讨Spring MVC的核心原理及其实际应用,首先从配置web.xml文件入手,解析其在初始化过程中的关键作用,接着深入分析请求处理流程,包括控制器、视图解析器等组件的工作机制,并结合具体案例,展示如何高效利用Spring MVC进行开发,为读者提供全面的技术指导。 ... [详细]
author-avatar
玉萍逸杰762_840
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有