Spring的概述

什么是Spring

  • Spring 是一个开源框架
  • Spring 为简化企业级应用开发而生,使用Spring 可以使简单的JavaBean 实现以前只有 EJB 才能实现的功能
  • Spring 是JavaSE/EE的一站式框架

1)Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean 2)通常与数据库表对应的类,我们把它称为实体类 3)实例对象,顾名思义就是实体类的对象

Spring的优点

  • 方便解耦,简化开发

Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理

  • AOP编程的支持

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

  • 声明式事务的支持

只需要通过配置就可以完成对事务的管理,而无需手动编程

  • 方便程序的测试

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

  • 方便集成各种优秀框架

Spring不排除各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts,Hibernate,MyBatis等)的直接支持

  • 降低JavaEE API的使用难度

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

Spring的模块

image.png

Spring IOC

底层实现原理

  1. 控制反转:就是将bean交给容器来创建,而不是直接在需要的时候通过new来创建
  2. 被动接受依赖类:就是在需要某个bean的时候容器将对象注入进来(可以简单理解为对象实例化)

就是spring容器提前创建好需要的bean,然后将bean注入在需要的地方。在需要的地方不需要通过new的方式来主动创建对象

image.png

快速入门

  • 下载Spring开发包

官方下载:https://repo.spring.io/libs-release-local/org/springframework/spring/
目录结构:
docs:api文档和开发规范
libs:开发需要的jar包(源码)
schema:开发需要的schema文件

  • 理解IOC控制反转和DI依赖注入

控制反转(IOC):将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理
简单说,就是创建UserService对象控制权被反转到了Spring框架
依赖注入(DI):就是在Spring创建这个对象的过程中,将这个对象所依赖的属性注入进去

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

  • 编写Spring核心配置文件

src/main/resources/applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <!-- 控制反转:UserService的创建权交给了Spring -->
  6. <bean id="userService" class="com.song.ioc.demo1.UserServiceImpl">
  7. <!-- 依赖注入:设置属性,即将这个类所依赖的属性注入进去 -->
  8. <property name="name" value="李四"/>
  9. </bean>
  10. </beans>
  • 在程序中读取Spring配置文件,通过Spring框架获得Bean,完成相应操作

src/test/java/com/song/ioc/demo1/IOCTestor.java

package com.song.ioc.demo1;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class IOCTestor {
    @Test
    /**
     * 传统开发方式
     */
    public void demo1(){
        // UserService userService = new UserServiceImpl();
        UserServiceImpl userService = new UserServiceImpl();
        // 设置属性
        userService.setName("张三");
        userService.sayHello();
    }

    @Test
    /**
     * Spring的方式实现
     */
    public void demo2(){
        // 创建Spring的工厂
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 通过工厂获得类
        UserService userService = (UserService)applicationContext.getBean("userService");

        userService.sayHello();
    }
}

实例代码下载:

git clone git@gitee.com:chenxiaonian/spring_ioc.git