四海网络网站建设定制,网页制作基础题,c2c的平台有哪些,做搜狗手机网站优✅作者简介#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者#xff0c;修心和技术同步精进。 #x1f34e;个人主页#xff1a;Java Fans的博客 #x1f34a;个人信条#xff1a;不迁怒#xff0c;不贰过。小知识#xff0c;大智慧。 #x1f49e;当前专栏… ✅作者简介2022年博客新星 第八。热爱国学的Java后端开发者修心和技术同步精进。 个人主页Java Fans的博客 个人信条不迁怒不贰过。小知识大智慧。 当前专栏SSM 框架从入门到精通 ✨特色专栏国学周更-心性养成之路 本文内容Spring 入门教程详解 文章目录Spring 概述简介Spring 框架特点Spring 的体系结构Spring 开发环境搭建第一个Spring 程序Spring 概述简介
Spring 是为了解决企业应用开发的复杂性而创建的一个轻量级的 Java 开发框架。Spring 的核心是 控制反转Inversion of ControlIoC 和 面向切面编程Aspect Oriented ProgrammingAOP。传统的 Java 程序类与类之间存在较强的依赖关系增加了程序开发的难度开发某一个类的时候还要考虑对另一个类的影响一个类的修改往往导致另一个类不得不跟着要修改程序可维护性和可拓展性变差。使用Spring 可以降低代码间的依赖程度耦合度为代码 “解耦”提高程序的可拓展性、可复用性和可维护性使主业务专注于自身的开发。
Spring 降低耦合度的方式有两种IoC 与 AOP。IoC 是控制反转的意思它的作用是使得主业务在相互调用过程中不用再自己维护关系即无须自己创建要使用的对象了而是由 Spring 容器统一管理自动 “注入”。AOP是面向切面编程的意思 AOP 技术不用再由程序员用硬编码的方式将系统级服务 “混杂” 到主业务逻辑中了而是由 Spring 容器统一完成 “织入”。
Spring 还提供对其他框架的支持可以支持 MyBatisHibernatestruts 等框架简化这些框架使用通过整合使它们高效地协同工作。
Spring 框架特点
1方便解耦简化开发
Spring 就是一个大工厂可以将所有对象的创建和依赖关系的维护交给 Spring 管理。
2方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架其内部提供了对各种优秀框架如 Struts2、Hibernate、MyBatis 等的直接支持。
3降低 Java EE API 的使用难度
Spring 对 Java EE 开发中非常难用的一些 APIJDBC、JavaMail、远程调用等都提供了封装使这些 API 应用的难度大大降低。
4方便程序的测试
Spring 支持 JUnit4可以通过注解方便地测试 Spring 程序。
5AOP 编程的支持
Spring 提供面向切面编程可以方便地实现对程序进行权限拦截和运行监控等功能。
6声明式事务的支持
只需要通过配置就可以完成对事务的管理而无须手动编程。
Spring 的体系结构
Spring 框架采用分层的理念根据功能的不同划分成了多个模块这些模块大体可分为 Data Access/Integration数据访问与集成、Web、AOP、Aspects、Instrumentation检测、Messaging消息处理、Core Container核心容器和 Test。如下图所示以下是 Spring Framework 4.x 版本后的系统架构图 上图中包含了 Spring 框架的所有模块这些模块可以满足一切企业级应用开发的需求在开发过程中可以根据需求有选择性地使用所需要的模块
1. Data Access/Integration数据访问集成
数据访问集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块具体介绍如下。
JDBC 模块提供了一个 JBDC 的样例模板使用这些模板能消除传统冗长的 JDBC 编码还有必须的事务控制而且能享受到 Spring 管理事务的好处。ORM 模块提供与流行的“对象-关系”映射框架无缝集成的 API包括 JPA、JDO、Hibernate 和 MyBatis 等。而且还可以使用 Spring 事务管理无需额外控制事务。OXM 模块提供了一个支持 Object /XML 映射的抽象层实现如 JAXB、Castor、XMLBeans、JiBX 和 XStream。将 Java 对象映射成 XML 数据或者将XML 数据映射成 Java 对象。JMS 模块指 Java 消息服务提供一套 “消息生产者、消息消费者”模板用于更加简单的使用 JMSJMS 用于用于在两个应用程序之间或分布式系统中发送消息进行异步通信。Transactions 事务模块支持编程和声明式事务管理。
2. Web模块
Spring 的 Web 层包括 Web、Servlet、WebSocket 和 Portlet 组件具体介绍如下。
Web 模块提供了基本的 Web 开发集成特性例如多文件上传功能、使用的 Servlet 监听器的 IOC 容器初始化以及 Web 应用上下文。Servlet 模块提供了一个 Spring MVC Web 框架实现。Spring MVC 框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的 JSP 标签完全无缝与 Spring 其他技术协作。WebSocket 模块提供了简单的接口用户只要实现响应的接口就可以快速的搭建 WebSocket Server从而实现双向通讯。Portlet 模块提供了在 Portlet 环境中使用 MVC 实现类似 Web-Servlet 模块的功能。
3. Core ContainerSpring的核心容器
Spring 的核心容器是其他模块建立的基础由 Beans 模块、Core 核心模块、Context 上下文模块和 SpEL 表达式语言模块组成没有这些核心容器也不可能有 AOP、Web 等上层的功能。具体介绍如下。
Beans 模块提供了框架的基础部分包括控制反转和依赖注入。Core 核心模块封装了 Spring 框架的底层部分包括资源访问、类型转换及一些常用工具类。Context 上下文模块建立在 Core 和 Beans 模块的基础之上集成 Beans 模块功能并添加资源绑定、数据验证、国际化、Java EE 支持、容器生命周期、事件传播等。ApplicationContext 接口是上下文模块的焦点。SpEL 模块提供了强大的表达式语言支持支持访问和修改属性值方法调用支持访问及修改数组、容器和索引器命名变量支持算数和逻辑运算支持从 Spring 容器获取 Bean它也支持列表投影、选择和一般的列表聚合等。
4. AOP、Aspects、Instrumentation和Messaging
在 Core Container 之上是 AOP、Aspects 等模块具体介绍如下
AOP 模块提供了面向切面编程实现提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术并且能动态的把这些功能添加到需要的代码中这样各司其职降低业务逻辑和通用功能的耦合。Aspects 模块提供与 AspectJ 的集成是一个功能强大且成熟的面向切面编程AOP框架。Instrumentation 模块提供了类工具的支持和类加载器的实现可以在特定的应用服务器中使用。messaging 模块Spring 4.0 以后新增了消息Spring-messaging模块该模块提供了对消息传递体系结构和协议的支持。
5. Test模块
Test 模块Spring 支持 Junit 和 TestNG 测试框架而且还额外提供了一些基于 Spring 的测试功能比如在测试 Web 框架时模拟 Http 请求的功能。
Spring 开发环境搭建
使用 Spring 之前需要安装 JDK、Tomcat 和 Eclipse
下载Apache Common Logging API
Common Logging 是使用 Spring 的必要组件。Apache Common Logging API 下载地址https://commons.apache.org/proper/commons-logging/download_logging.cgi
下载完成后将压缩包解压到相应位置。该文件包含以下 jar 文件和其它支持文档目录结构如下。 下载Spring
Spring 下载地址https://repo.spring.io/ui/native/libs-release-local/org/springframework/spring/5.3.9/
该文件目录结构如下 名称作用docs包含 Spring 的 API 文档和开发规范libs包含开发需要的 jar 包和源码包schema包含开发所需要的 schema 文件在这些文件中定义了 Spring 相关配置文件的约束
在 libs 目录中包含了 Spring 框架提供的所有 jar 文件其中有 4 个 jar 文件是 Spring 框架的基础包分别对应 Spring 容器的四个模块具体如表 2 所示。
名称作用spring-core-x.x.xx.RELEASE.jar包含 Spring 框架基本的核心工具类Spring 其他组件都要用到这个包中的类是其他组件的基本核心。spring-beans-x.x.xx.RELEASE.jar所有应用都要用到的它包含访问配置文件、创建和管理 Bean 以及进行 Inversion of ControlIoC或者 Dependency InjectionDI操作相关的所有类。spring-context-x.x.xx.RELEASE.jarSpring 提供在基础 IoC 功能上的扩展服务此外还提供许多企业级服务的支持如邮件服务、任务调度、JNDI 定位、EJB 集成、远程访问、缓存以及各种视图层框架的封装等spring-expression-x.x.xx.RELEASE.jar定义了 Spring 的表达式语言。 需要注意的是在使用 Spring 开发时除了 Spring 自带的 JAR 包以外还需要一个第三方 JAR 包 commons.logging 处理日志信息
加粗样式使用 Spring 框架时只需将 Spring 的 4 个基础包以及 commons-logging-1.2.jar 包复制到项目的 lib 目录并发布到类路径中即可。
特别说明 如果你是使用 maven 构建的项目Spring 的开发环境 只需要在 pom.xml 中添加 spring-context 依赖即可因为 spring-context 依赖中会自动依赖 Spring 的其他依赖。
!--引入Spring依赖--dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.9/version/dependency第一个Spring 程序
【1】创建 maven 的 javaweb 项目目录结构如下图 【2】在 pom.xml 文件中添加依赖
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcn.kgc.spring01/groupIdartifactIdspring01/artifactIdversion1.0-SNAPSHOT/versionpackagingjar/packagingnamespring01/nameurlhttp://maven.apache.org/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope/dependency
!--引入Spring依赖--dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.9/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.24/version/dependency/dependencies
/project
【3】引入 beans 配置文件 spring-config.xml
constructor-arg 通过构造方法标签完成对象初始化需要提供对应的构造方法。property 通过属性标签实现对象的赋值操作需要调用类中的set方法。
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
!--声明需要托管的对象--!--constructor-arg 通过构造方法完成对象初始化 需要提供对应的构造方法--bean iduser classcn.kgc.spring01.entity.Userconstructor-arg nameid value2/constructor-argconstructor-arg nameusername value王五/constructor-arg/bean!--property 标签实现对象的赋值操作 需要调用类中的set方法--bean idperson classcn.kgc.spring01.entity.Personproperty namename value李四/propertyproperty nameid value1/property/bean
/beansbean 标签属性详解 【4】创建 User 和 Person 实体类
User 类
package cn.kgc.spring01.entity;import lombok.Data;Data
public class User {private String username;private Integer id;public User(){System.out.println(user());}public User(Integer id) {System.out.println(User(String username, Integer id));this.username username;this.id id;}public User(String username, Integer id) {System.out.println(User(String username, Integer id));this.username username;this.id id;}
}
Person 类
package cn.kgc.spring01.entity;import lombok.Data;public class Person {private String name;private Integer id;public Person(){System.out.println(person());}public String getName() {return name;}public void setName(String name) {System.out.println(setName());this.name name;}public Integer getId() {return id;}public void setId(Integer id) {System.out.println(setId());this.id id;}Overridepublic String toString() {return Person{ name name \ , id id };}
}
【5】测试类 Testpublic void Test01(){ApplicationContext ac new ClassPathXmlApplicationContext(spring-config.xml);Person person ac.getBean(person,Person.class);System.out.println(person person);User user ac.getBean(user,User.class);System.out.println(user user);}测试结果 码文不易本篇文章就介绍到这里如果想要学习更多Java系列知识点击关注博主博主带你零基础学习Java知识。与此同时对于日常生活有困扰的朋友欢迎阅读我的第四栏目《国学周更—心性养成之路》学习技术的同时我们也注重了心性的养成。