Spring框架入门(spring框架入门案例)
myzbx 2025-06-04 00:04 8 浏览
一. spring是什么?
Spring是分层的JavaSE/EE (一站式) 轻量级开源的容器框架,以IOC(Inverse of Control 控制反转:对象之间的关系由容器创建,降低了程序之间的依赖性)和AOP(Aspect Oriented Programming 面向切面编程)为内核的容器框架
一站式、分层:
JavaEE的有三层结构:web层、业务层、数据访问层(持久层,集成层),而Spring框架有对三层的每层解决方案:
web层:Spring MVC
持久层:JDBC Template (applicationContext.xml)
业务层:Spring的Bean管理(Bean:是spring根据用户提供相应的需求创建的对象,由IOC管理)(service)
spring官网:https://spring.io/
二.spring受欢迎的原因
Spring的英文翻译为春天,可以说是给Java程序员带来了春天,因为它极大地简化了开发,有效的解决了当时软件开发比较复杂的问题(当时采用EJB开发JAVA EE应用,但EJB存在着学习成本太高,开发效率比较低,资源消耗很高的问题)。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。可以说Spring是一个提供了更完善开发环境的一个框架,可以为POJO(Plain Ordinary Java Object)对象提供企业级的服务。
Spring的优秀之处:
1、最完善的轻量级核心框架。
2、简化了开发,方便解耦
3、 声明式事务的支持:只需要通过配置就可以完成对事务的管理,而无需手动编程
4、集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps等优秀框架。
5、强大的AOP功能:Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
6、 方便程序的测试:Spring对Junit4支持,可以通过注解方便的测试Spring程序
三.spring框架的七大组成模块
3.1 核心容器模块
这是Spring框架最基础的部分,所有的Spring模块都是在核心容器之上构建的。它提供了依赖注入(DependencyInjection)特征来实现容器对Bean的管理。这里最基本的概念是BeanFactory,它是任何Spring应用的核心。BeanFactory是工厂模式的一个实现,它使用IOC(控制反转)将应用配置和依赖说明从实际的应用代码中分离出来。
3.2 应用上下文(Context)模块(.xml文件)
核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为一个框架。这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持(Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息)。
另外,这个模块提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括了对模版框架例如Velocity和FreeMarker集成的支持。
3.3 Spring的AOP模块
Spring在它的AOP模块中提供了对面向切面编程的丰富支持。这个模块是在Spring应用中实现切面编程的基础。为了确保Spring与其它AOP框架的互用性,Spring的AOP支持基于AOP联盟定义的API。AOP联盟是一个开源项目,它的目标是通过定义一组共同的接口和组件来促进AOP的使用以及不同的AOP实现之间的互用性。通过访问他们的站点,你可以找到关于AOP联盟的更多内容。
Spring的AOP模块也将元数据编程引入了Spring。使用Spring的元数据支持,你可以为你的源代码增加注释,指示Spring在何处以及如何应用切面函数。
3.4 JDBC抽象和DAO模块
使用JDBC经常导致大量的重复代码,取得连接、创建语句、处理结果集,然后关闭连接。Spring的JDBC和DAO模块抽取了这些重复代码,因此你可以保持你的数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。
这个模块还在几种数据库服务器给出的错误消息之上建立了一个有意义的异常层。使你不用再试图破译神秘的私有的SQL错误消息!
另外,这个模块还使用了Spring的AOP模块为Spring应用中的对象提供了事务管理服务。
3.5 对象/关系映射集成模块
对那些更喜欢使用对象/关系映射工具而不是直接使用JDBC的人,Spring提供了ORM模块。Spring并不试图实现它自己的ORM解决方案,而是为几种流行的ORM框架提供了集成方案,包括Hibernate、JDO和iBATIS SQL映射。Spring的事务管理支持这些ORM框架中的每一个也包括JDBC。
3.6 Spring的Web模块
Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。例如:实现文件上传的multipart请求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。
3.7 Spring的MVC框架模块
Spring为构建Web应用提供了一个功能全面的MVC框架。虽然Spring可以很容易地与其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC对控制逻辑和业务对象提供了完全的分离。
它也允许你声明性地将请求参数绑定到你的业务对象中,此外,Spring的MVC框架还可以利用Spring的任何其它服务,例如国际化信息与验证。
四 .入门案例
4.1 导入依赖
<dependencies>
<!-- Spring的核心依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.10</version>
</dependency>
<!-- 用于测试的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
</dependencies>
4.2 在Java的service创建接口和它的实现类
UserService的接口
package com.qf.service;
public interface UserService {
public void addUser();
public void deleteUser();
}
UserService的实现类
package com.qf.service.impl;
import com.qf.service.UserService;
public class UserServiceImpl implements UserService {
@Override
public void addUser() {
System.out.println("addUser....");
}
@Override
public void deleteUser() {
System.out.println("deleteUser....");
}
}
4.3 创建applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- <bean></bean>标签:创建bean对象 -->
<!-- 无参构造创建对象 -->
<bean id="userService" class="com.qf.service.impl.UserServiceImpl"></bean>
4.4 创建测试类
public class SpringTest {
@Test
public void test() {
//加载配置文件,创建applicationContext对象
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
//获取Bean对象(即userService)
UserService userService = (UserService)applicationContext.getBean("userService");
//调用方法
userService.addUser();
userService.deleteUser();
}
4.5 测试结果
addUser....
deleteUser....
Process finished with exit code 0
原文链接:
https://www.cnblogs.com/z-z-s/p/15415354.html
相关推荐
- Three.js导航网格:数据结构设计与实现
-
导航网格或navmesh是一种用于虚拟环境中路线规划的数据结构,在游戏开发中特别有用。它由一组代表地图区域的凸多边形组成,多边形的边用额外的连接信息进行了注释,显示了游戏角色可以穿越的区域。正如你...
- 苹果公司申请新专利,汽车AR导航这些功能都能实现
-
近日,美国专利商标局公布了苹果公司一项新的专利申请,这项新专利与汽车AR(增强现实)导航有关,可为下一代地图导航提供支持。用户通过AR设备可以直观地在3D模型中看到何时转向、减速或掉头等提示。据悉,苹...
- 运行时修改内存中的Dalvik指令来改变代码逻辑
-
一、前言最近在弄脱壳的时候发现有些加固平台的加固方式是修改了dex文件结构,然后在加载dex到内存的时候,在进行dex格式修复,从而达到了apk保护的效果,那么在dex加载到内存的时候,如何进行dex...
- 流放之路2(0.2.0g)版本5月1日更新
-
以下内容为谷歌加gpt翻译,有不妥之处请自行谅解:2025年5月1日中午12:00(GMT+8):由于技能宝石消失问题,本次补丁已回滚。我们会尽快重新发布此补丁。2025年5月1日下午12:30(...
- Win10桌面/手机版最深层次开发功能挖掘
-
IT之家讯Win10开发者预览版为我们提供了一个Win10大框架的早期概览,使开发者与热心用户都可以提前感受Win10带来的新特性,尝试新工具,而作为开发者,最关心的莫过于Windows多平台通用应...
- 旅行规划太复杂?Deepchat结合高德地图MCP,轻松搞定杭州清明游
-
我们憧憬美好旅行的同时,旅游规划往往成为一道难以跨越的门槛。路线如何安排最合理?交通怎样选择最便捷?景点该如何取舍才能避开人潮?这些问题常常让人望而却步。如今,随着高德地图MCP服务的发布,结合Dee...
- yaml基础语法讲解(yaml文件如何使用)
-
YAML基础它的基本语法规则如下:大小写敏感使用缩进表示层级关系缩进时不允许使用Tab键,只允许使用空格。缩进的空格数目不重要,只要相同层级的元素左侧对齐即可#表示注释,从这个字符一直到行尾,都会...
- 谷歌向更多开发者开放地图平台 助推增强现实游戏发展
-
来源:cnBeta谷歌周一宣布了将向所有人开放GoogleMapsPlatform的消息,以便开发者能够将地图数据纳入它们的游戏中。借助新工具,开发商可轻松打造类似《精灵宝可梦Go》的增强现...
- 咖啡一点通 | 拉花是门技巧,学会这些方法可以快速入门
-
了解更多精彩内容,欢迎关注【世界咖啡馆地图公众号ID:cafe_maps】咖啡表面的漂亮拉花,是运用牛奶、奶泡来制作,咖啡拉花有其难度与技巧,拉花时,要考量不同的咖啡杯大小而调整倒入的距离,倒入时...
- scala基础教程之-数据类型(scala类的定义)
-
一、基本的数据类型数据类型描述Byte8位有符号值。范围从-128到127Short16位有符号值。范围从-32768至32767Int32位有符号值。范围从-2147483648to2...
- Google Maps React 组件宣布开源(react开发chrome插件)
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!前言当MapsJavaScriptA...
- 为什么、何时以及如何创建顾客体验地图?
-
导读:体验地图结合了两种强大的工具——讲故事和可视化——帮助团队理解和解决顾客的需求。虽然根据场景和业务目标不同,顾客体验地图会采取多种形式,但是通常会包含某些通用元素,并遵循一些基本的指导原则。本文...
- Apple Watch 开发者套件 WatchKit 发布后,你需要知道这些
-
Apple上线了共AppleWatch开发者使用的开发工具WatchKit。从这款工具和相关文档中,TheVerge发现了一些重要细节。AppleWatch几乎无法独立使用根据开发者文...
- Android 开发系列教程之(一)Android基础知识
-
什么是AndroidAndroid一词最早是出现在法国作家维里耶德利尔·亚当1986年发表的《未来夏娃》这部科幻小说中,作者利尔·亚当将外表像人类的机器起名为Android,这就是Android小人名...
- Overture Maps Foundation 发布全球交通数据集
-
据Gpsworld1月1日报道,OvertureMapsFoundation发布了新的全球交通数据集,这一数据集覆盖了全球8600万公里的道路。该数据集的发布标志着一个重要的里程碑,旨在为开发...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)