测试同学从0到1上手Spring

最近在各个大厂的JD中关于测试平台开发的职位信息频频曝光,有很多同学对该职位产生了极高的热情。也有很多人对其望而却步,认为Spring、Spring boot这些东东太深奥了,开发都很难搞定,自己是一个tester又怎能驾驭呢?为了打消大家的顾虑,我准备了一系列文章,通过我一个测试人的视角(我是从零开始学习,我懂测试同学的需求),用最通俗的语言帮大家搞定Spring基础知识,进而快速理解Spring并在实际工作中进行应用!

Spring定义

Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的??蚣艿闹饕攀浦痪褪瞧浞植慵芄?,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring 框架的 7 个???,如下图所示:

每个??榈墓δ苋缦拢?/p>

Spring core:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

Spring Context:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

Spring AOP:通过配置管理特性,Spring AOP ??橹苯咏嫦蚯忻娴谋喑坦δ?, 集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理任何支持 AOP的对象。Spring AOP ??槲?Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中。

Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

Spring Web:Web 上下文??榻⒃谟τ贸绦蛏舷挛哪?橹?,为基于? ? Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web ??榛辜蚧舜矶嗖糠智肭笠约敖肭蟛问蠖ǖ接蚨韵蟮墓ぷ?。

Spring MVC:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText和POI

其中最为重要的就是Spring Core(控制反转技术,即IOC)和 Spring AOP,我会在后续的文章中进行详细介绍,今天我们来重点讲解Spring的环境搭建和Hello Spring Demo的编写。

环境搭建

最简单的方式,创建一个maven工程,pom.xml如下

<dependency>

??? <groupId>org.springframework</groupId>

??? <artifactId>spring-webmvc</artifactId>

??? <version>5.2.5.RELEASE</version>

</dependency>

Spring 中的Bean

Spring容器可以被看作一个大工厂,而 Spring 容器中的 Bean 就相当于该工厂的产品。如果希望这个大工厂能够生产和管理 Bean,这时则需要告诉容器需要哪些 Bean,以及需要以何种方式将这些 Bean 装配到一起。

Bean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。总之,JavaBean就是遵循一些规范的Java类。众所周知,属性名称符合这种模式,其他Java 类可以通过反射机制发现和操作这些JavaBean 的属性。

范例代码如下:

public class Person {

??? //Person类封装的私有属性

??? // 姓名 String类型

??? private String name;

??? // 性别 String类型

??? private String sex;

??? // 年龄int类型

??? private int age;

??? //Person类的无参数构造方法

??? public Person() {

??? }

??? //Person类对外提供的用于访问私有属性的public方法

??? public String getName() {

??????? return name;

??? }

??? public void setName(String name) {

??????? this.name = name;

??? }

??? public String getSex() {

??????? return sex;

??? }

??? public void setSex(String sex) {

??????? this.sex = sex;

??? }

??? public int getAge() {

??????? return age;

??? }

??? public void setAge(int age) {

??????? this.age = age;

??? }

}

Spring中的配置文件

Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。Spring配置文件是一个或多个标准的XML文档,applicationContext.xml(也可以定义为其他名字)是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。我们可以把配置文件保存在src/main/resources目录下

Spring配置文件支持两种不同的格式,分别是 XML 文件格式和 Properties 文件格式。通常情况下,Spring 会以 XML 文件格式作为Spring 的配置文件,这种配置方式通过 XML 文件注册并管理 Bean 之间的依赖关系。XML 格式配置文件的根元素是 <beans>,该元素包含了多个 <bean> 子元素,每一个 <bean> 子元素定义了一个 Bean,并描述了该 Bean 如何被装配到 Spring 容器中。配置文件基础格式如下:

<?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

??????? https://www.springframework.org/schema/beans/spring-beans.xsd">

? <bean id="..." class="...">?

?? </bean>

<bean id="..." class="...">?

<property name=" ..." value="..."/>

</beans>

其中

xmlns表示xml需要引入的命名空间。

bean= 对象

id= 变量名,id 是bean的标识符,要唯一,可以理解为一个实例名

class= new的类

property相当于给对象中的属性设值

Hello Spring

写一个类代码

public class HelloSpring {

??? private String name="hello";

??? HelloSpring(){

???? System.out.println("Hello Spring");

??? }?

??? public String getName() {

??????? return this.name ;

??? }????

??? public void setName(String name) {

??????? this.name = name;

??? }

}

在配置文件中添加HelloSpring的类配置信息

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

??? xmlns:context="http://www.springframework.org/schema/context"

??? xsi:schemaLocation="http://www.springframework.org/schema/beans

??????? https://www.springframework.org/schema/beans/spring-beans.xsd

???????http://www.springframework.org/schema/context

???????https://www.springframework.org/schema/context/spring-context.xsd">

<beanid="hellospring"class="com.my.demo.HelloSpring"/>

</beans>?

写一个测试类

public class HelloTest {

??? ?public static void main(String[] args) {

??? ???????//获取spring上下文对象

??? ???????ApplicationContextcontext = new ClassPathXmlApplicationContext("beans1.xml");

??? ???????//我们的对象能在都在spring中管理了,我们要使用,直接取出来就可以了

??? ???????HelloSpringhello = (HelloSpring) context.getBean("hellospring");

??? ???????System.out.println(hello.getName());

??? ??? }

}

运行类HelloTest,运行结果如下:

Hello Spring //构造函数中输出的值

Hello //getName方法中输出的值

是不是很神奇,我们可以看到spring并没有new 实例的过程,但是完成了实例化的操作!并成功调用了getName方法,这就是Spring 容器中对Bean的管理,简单的说,就是Spring框架从配置文件beans1.xml中获取了类HelloSpring的实例hellospring,并自动完成了实例化的相关工作!这项技术就是IOC,我会在下一篇文章中详细说明。

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351