• Spring学习笔记(一)—— Spring介绍及入门案例


    一、Spring概述

    1.1 Spring是什么

      Spring是一个开源框架,是于2003年兴起的一个轻量级的Java开发框架, 由Rod Johnson 在其著作Expert one on one J2EE design and development中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式)轻量级开源框架。

    目的:解决企业应用开发的复杂性

    功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

    范围:任何Java应用

      它是一个容器框架,用来装javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用。

    1.2 为什么要学习Spring

    • 方便解耦,简化开发:Spring就是一个大工厂,可以将所有对象的创建和依赖关系交给Spring来管理,避免硬编码所造成的过度程序耦合。

    • AOP编程的支持:Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。

    • 声明式事务的支持:只需要通过配置就可以完成对事务的管理,而无需手动编程

    • 方便程序的测试:Spring对Junit4支持,可以通过注解方便的测试Spring程序

    • 方便集成各种优秀框架:Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、Mybatis、Quartz等)的直接支持

    • 降低JavaEE API的使用难度:Spring对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

    1.3 Spring的体系结构

      下面是官网给出的Spring4结构图

     

    【核心容器(Core Container)】

    1. spring-core:依赖注入IoC与DI的最基本实现

    2. spring-beans:Bean工厂与bean的装配

    3. spring-context:spring的context上下文即IoC容器

    4. spring-expression:spring表达式语言

    【数据访问/集成部分(data access)】

    1. spring-jdbc:jdbc的支持

    2. spring-orm:对象关系映射,集成orm框架

    3. spring-oxm:对象xml映射

    4. spring-jms:java消息服务

    5. spring-tx:事务控制

    【web】

    1. spring-websocket:websocket protocol是HTML5一种新的协议。它实现了浏览器与服务器全双工通信,spring支持websocket通信。

    2. spring-web:基础web功能,如文件上传

    3. spring-webmvc-portlet:提供了在portlet环境下的mvc实现

    4. spring-webmvc:mvc实现

    【AOP】

    1. spring-aop:面向切面编程

    2. spring-aspects:集成AspectJ

    3. spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器

    【test】

    1. spring-test:spring测试,提供junit与mock测试功能

    1.4 Spring IoC 和 DI 简介

    【IoC:Inverse of Control】——控制反转

    • 读作“反转控制”,更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理。
    • 正控:若要使用某个对象,需要自己去负责对象的创建
    • 反控:若要使用某个对象,只需要从 Spring 容器中获取需要使用的对象,不关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架

      举个例子:

       控制反转显然是一个抽象的概念,我们举一个鲜明的例子来说明。

      在现实生活中,人们要用到一样东西的时候,第一反应就是去找到这件东西,比如想喝新鲜橙汁,在没有饮品店的日子里,最直观的做法就是:买果汁机、买橙子,然后准备开水。值得注意的是:这些都是你自己“主动”创造的过程,也就是说一杯橙汁需要你自己创造。

      

      然而到了今时今日,由于饮品店的盛行,当我们想喝橙汁时,第一想法就转换成了找到饮品店的联系方式,通过电话等渠道描述你的需要、地址、联系方式等,下订单等待,过一会儿就会有人送来橙汁了。

      

      请注意你并没有“主动”去创造橙汁,橙汁是由饮品店创造的,而不是你,然而也完全达到了你的要求,甚至比你创造的要好上那么一些。

      总结:

      传统的方式:通过new 关键字主动创建一个对象

      IOC方式:对象的生命周期由Spring来管理,直接从Spring那里去获取一个对象。 IOC是反转控制 (Inversion Of Control)的缩写,就像控制权从本来在自己手里,交给了Spring。
      

    【DI:Dependency Injection】——依赖注入

    • 指 Spring 创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配置设置给该对象  。
    • 实现IOC需要DI做支持
    • 注入的方式:
      • set方法注入
      • 构造方法注入
      • 字段注入
    • 注入类型:
      • 值类型注入(8大基本数据类型)
      • 引用类型注入(将依赖对象注入)    

    二、入门案例

    2.1 下载Spring的开发包

      官网:http://spring.io/

      下载地址:https://repo.spring.io/libs-release-local/org/springframework/spring/

      下载后解压的目录结构:

      

    2.2 创建web工程,引入Spring的开发包

       核心容器(Core Container)中的四个jar包(spring-core、spring-beans、spring-context、spring-expression)是我们使用spring要导入的最最基础的包。

      

      另外还需要一个日志包:

    2.3 创建一个对象

    public class User {
        private String name;
        private Integer age;
        get/set...
    }

    2.4 创建配置文件

    • 配置文件可放在任意位置,建议放在src下
    • 配置文件的文件名任意,建议为applicationContext.xml

    【导入约束】

      详细步骤见:spring配置文件中导入约束的详细步骤

    【将对象注册到容器中】

    <?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元素:使用该元素描述需要spring容器管理的对象
            class属性:被管理对象的完整类名
            name属性:给被管理的对象起个名字,获得该对象时根据该名称获得对象,可以重复,可以使用特殊字符
            id属性:与name属性一模一样,名称不可重复,不能使用特殊字符
         -->
        <bean name="user" class="cn.itcast.domain.User"></bean>
    </beans>

    2.5 编写测试代码

      @Test
        public void fun1() throws Exception {
            // 1.创建容器对象
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
            // 2.向容器"要"user对象
            User user = (User) applicationContext.getBean("user");
            // 3.打印user对象
            System.out.println(user);
        }

    三、Spring中的容器

    3.1 ApplicationContext

      

      ApplicationContext接口有两个实现类:

    • ClassPathXmlApplicationContext:从类路径下加载配置文件:
      ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    • FileSystemXmlApplicationContext:从硬盘绝对路径下加载配置文件
      ApplicationContext ac = new FileSystemXmlApplicationContext("c:/applicationContext.xml");

      ApplicationContext容器的特点:每次容器启动时就会创建容器中配置的所有对象

    3.2 BeanFactory 

       ApplicationContext 是 BeanFactory 的子接口之一,换句话说:BeanFactory 是 Spring IoC 容器所定义的最底层接口,而 ApplicationContext 是其最高级接口之一,并对 BeanFactory 功能做了许多的扩展,所以在绝大部分的工作场景下,都会使用 ApplicationContext 作为 Spring IoC 容器。

       

      从上图中我们可以几乎看到, BeanFactory 位于设计的最底层,它提供了 Spring IoC 最底层的设计。

      BeanFactory接口实现类的容器.特点是每次在获得对象时才会创建对象

    【BeanFactory 和 ApplicationContext 的区别】

    • BeanFactory:是Spring中最底层的接口,只提供了最简单的IoC功能,负责配置,创建和管理bean。另外,BeanFactory是在getBean的时候才会生成类的实例。
    • ApplicationContext:继承了 BeanFactory,拥有了基本的 IoC 功能;ApplicationContext在加载applicationContext.xml(容器启动)时候就会创建类的实例。

       在应用中,一般不使用 BeanFactory,而推荐使用ApplicationContext(应用上下文)

     
     
    参考资料:https://www.cnblogs.com/wmyskxz/p/8820371.html
  • 相关阅读:
    Java NIO中的FileLock(文件锁)
    Java NIO中的Channel接口
    Java NIO中的Buffer类
    Java NIO简介
    Java 自定义序列化、反序列化
    Java 对象的序列化、反序列化
    SVN常用操作
    Windows下SVN的下载、安装
    Java RandomAccessFile类
    Java的IO流
  • 原文地址:https://www.cnblogs.com/yft-javaNotes/p/10282630.html
Copyright © 2020-2023  润新知