【SSH框架】之Spring系列(一)

微信公众号:compassblog 欢迎关注、转发,互相学习,共同进步! 有任何问题,请后台留言联系!

1、前言

前面更新过几篇关于 Struts2 框架和 Hibernate 框架的文章,但鉴于这两种框架在今天的主流开发中已经很少用了,所以关于这两种框架的更新权当兴趣,有时间也还会更新的。现在主流开发中代替这两个框架的是 SpringMVC 和 MyBatis 等等,接下来主要精力集中于 Spring、SpringMVC、Spring Boot 等等,特别是 Spring Boot 框架,当然肯定也会有其他方面的内容,知无不写,写无不尽。

2、Spring 框架概述

(1)、Spring 框架在三层架构中的位置

Spring 框架在三层架构中的位置在【【SSH框架】之Hibernate系列(一)】这篇文章中已经提到过,主要描述与下图:

(2)、Spring 是什么

Spring 是一个轻量级的 Java 开源框架,兴起于2003年,它分层架构的特点为 J2EE 应用程序开发提供集成的框架。Spring 的核心是控制反转(IOC)和面向切面(AOP),是一个一站式的框架。

(3)、Spring 框架的优势与功能(一站式)

  • Spring 相当于一个容器,可以将所有对象创建和依赖关系维护,交给 Spring 管理 AOP 编程的支持,容器中装什么对象就有什么功能。
  • Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能声明式事务的支持只需要通过配置就可以完成对事务的管理,而无需手动编程,使得程序的测试更为方便。
  • Spring 不仅不排斥各种优秀的开源框架,如:Struts、Hibernate、MyBatis等,还能帮其他框架管理对象,降低 JavaEE API 的使用难度。
  • Spring 对 JavaEE 中的 API 如 JDBC、JavaMail等提供了封装,使这些 API 应用难度大大降低。
  • Spring 支持 JUnit 测试支持,可以通过注解方便的测试 Spring 程序方便集成各种优秀框架。

3、搭建 Spring 开发环境并完成第一个测试实例

(1)、新建一个 web 项目,导入 Spring 所需要的基本包,如下图所示:

(2)、创建一个 Bean 对象,代码如下:

package com.spring.bean;

public class Student {
    //基本属性
    private String name; //姓名
    private int age;    //年龄
    private String grade;   //年级
    private String course;  //科目
    private int rank;   //排名

    //setter和getter方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getGrade() {
        return grade;
    }
    public void setGrade(String grade) {
        this.grade = grade;
    }
    public String getCourse() {
        return course;
    }
    public void setCourse(String course) {
        this.course = course;
    }
    public int getRank() {
        return rank;
    }
    public void setRank(int rank) {
        this.rank = rank;
    }

}

(3)、在 src 下新建配置文件 applicationContext.xml,将注册对象写入容器,代码如下:

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">

    <!-- 将User对象交给spring容器管理 -->
    <bean  name="stu" class="com.spring.bean.Student" ></bean>

</beans>

(4)、书写测试类 TestDemo.java,代码如下:

package com.spring.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.bean.Student;

public class TestDemo {

    @Test
    public void test(){
        // 创建容器对象
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 向容器获取user对象
        Student student = (Student) ac.getBean("stu");

        //3打印stu对象
        System.out.println(student);
    }
}

(5)、使用 JUnit4 进行测试,结果如下图:

本项目运行环境:jdk1.7

4、Spring 配置详解

<!-- Bean元素:使用该元素描述需要spring容器管理的对象
            class属性:被管理对象的完整类名.
            name属性:给被管理的对象起个名字.获得对象时根据该名称获得对象.  
                    可以重复.可以使用特殊字符.
            id属性: 与name属性一模一样. 
                    名称不可重复.不能使用特殊字符.
            结论: 尽量使用name属性.
-->
<bean  name="stu" class="com.spring.bean.Student" ></bean>
<!-- 
可以通过import属性导入其他spring配置文件
<import resource="路径/*.xml"/>
-->

5、Spring 框架的思想

(1)、IOC:Inverse Of Control,即控制反转,将对象创建的方式交给了 Spring 容器;

(2)、DI:Dependency Injection,即依赖注入,IOC 的实现需要 DI 支持。

6、Spring 属性注入

(1)、set方法注入:

<bean  name="stu" class="com.spring.bean.Student" >
        <!--值类型注入: 为stu对象中名为name的属性注入"孔乙己"作为值 -->
        <property name="name" value="孔乙己" ></property>
        <property name="age"  value="22" ></property>
        <property name="grade"  value="大三" ></property>
        <property name="rang"  value="1" ></property>
        <!-- 引用类型注入: 为course属性注入下方配置的course对象 -->
        <property name="course"  ref="course" ></property>
    </bean>

    <!-- 将course对象配置到容器中 -->
    <bean name="course" class="com.spring.bean.Course" >
        <property name="name" value="Java开发" ></property>
        <property name="page" value="889" ></property>
    </bean>

(2)、构造函数注入:

<bean name="stu1" class="com.spring.bean.Student" >
    <!-- name属性: 构造函数的参数名 -->
    <!-- index属性: 构造函数的参数索引 -->
    <!-- type属性: 构造函数的参数类型-->
    <constructor-arg name="name" index="0" type="java.lang.Integer" value="compasser"  ></constructor-arg>
    <constructor-arg name="course" ref="course" index="1" ></constructor-arg>
</bean>

后台回复 “Spring系列一” 获取本项目源码

您可能还喜欢:

本系列后期仍会持续更新,欢迎关注!

如果你认为这篇文章有用,欢迎转发分享给你的好友!

原文发布于微信公众号 - compassblog(gh_7303ea249902)

原文发表时间:2018-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

【学习笔记】springboot教程(1)第一个demo

【学习笔记】springboot教程(1) 第一个demo 摘要: 先了解下springboot到底是个什么东西,能用来干什么?有什么好处?也就是为什么要学习他...

3564
来自专栏蓝天

Linux下压力测试工具推荐:WebBench

由于我的VPS的服务器不是Apache,而且我也找不到ab测试工具。所以只好Google一下咯。发现一个参数少又精的压力测试工具,但是始终没有找到最新版本。只好...

1132
来自专栏JAVA后端开发

flowable实现流程全局事件

最近在研究flowable,发现这个东东虽说是activiti的升级版,但感觉还是没有a5的好用。 项目中需要实现一个全局事件,实现如下:

3433
来自专栏大魏分享(微信公众号:david-share)

实战:将POJO类转换为EJB | 从开发角度看应用架构6

1135
来自专栏进击的程序猿

第1章: Spring 基础第1章:Spring 基础

为了体验spring,所以建立的是一个 maven quick start 的项目,建立后的 pom.xml 配置如下:

994
来自专栏大魏分享(微信公众号:david-share)

设计一个应用集成的路由:构建以API为中心的敏捷集成系列-第五篇

Message 消息: Unit of transport containing 消息传递的内容包括

1112
来自专栏Java架构师学习

Spring5都有那些新特性与增强,需要了解的Java程序员来看一看

Spring FrameWork 5.0新的功能 JDK 8+和Java EE7+以上版本 整个框架的代码基于java8 通过使用泛型等特性提高可读性 对j...

3927
来自专栏阿杜的世界

Spring实战5-基于Spring构建Web应用主要内容

写在前面:关于Java Web,首先推荐一篇文章——写给java web一年左右工作经验的人,这篇文章的作者用精练的话语勾勒除了各种Java框架的缘由和最基本的...

1142
来自专栏java一日一条

Spring面试问答

Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于...

1121
来自专栏技术墨客

Spring-boot特性(2) 原

在使用Spring-boot时,永远要记住它仅仅是Spring Framework的延伸(或者说整合),其底层还是基于Spring Framework(core...

2312

扫码关注云+社区

领取腾讯云代金券