文章目录

  • 一、Spring简介
  • 1、特点
  • 2、Spring框架的组成结构
  • 二、Spring IOC
  • 1、IOC概述
  • 2、Spring IOC的底层实现原理
  • 三、入门案例
  • 1、Spring开发包下载
  • 2、传统方法与控制反转的对比


一、Spring简介

Spring是一个开源框架,是Java SE/EE 的一站式框架,由Rod Johnson开发,2004年发布了Spring框架的第一版。

1、特点
  1. 方便解耦、简化开发
    Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给Spring进行管理。
  2. AOP变成支持
    Spring提供了面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等事务。
  3. 声明式事务的支持
    只需要通过配置就可以完成对事务的管理,而无需手动编程。
  4. 方便程序测试
    Spring提供了Junit4支持,可以通过注解方便的测试Spring程序
  5. 方便集成各种优秀框架
    Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis等)的直接支持
  6. 降低Java EE API的使用难度
    Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
2、Spring框架的组成结构

spring 开放协议 spring开源协议是哪一种_spring 开放协议

二、Spring IOC

1、IOC概述

IOC(Inversion of Control):即控制反转,不是技术,而是一种设计思想。它意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

  • 谁控制谁,控制什么
    传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IOC是有专门一个容器来创建这些对象,即由IOC容器来控制对象的创建;谁控制谁?当然是IOC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。
  • 为何是反转,哪些方面反转了
    有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。
  • 传统主动注入

spring 开放协议 spring开源协议是哪一种_spring 开放协议_02

  • IOC依赖注入(DI)
    依赖注入的目的是在代码之外管理程序间组件的依赖关系.

spring 开放协议 spring开源协议是哪一种_jar_03

2、Spring IOC的底层实现原理
  • 用到的技术
  1. xml配置文件
  2. dom4解析配置xml文件
  3. 工厂设计模式
  4. 反射
  • 实现步骤
  1. 创建xml配置文件,配置要创建的类的对象类
  2. 创建工厂类
  3. 使用dom4j解析配置文件
  4. 使用反射创建对象

三、入门案例

1、Spring开发包下载

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

  • 目录结构
    选择 xxx.RELEASE-dist.zip 版本,下载后解压可以看到如下目录结构:
    ![4](H:\Java攻城狮\笔记整理\4-1-1 Spring IOC\images\spring目录结构.PNG)
  • Spring核心开发包
  1. spring-beans-4.0.0.RELEASE.jar
  2. spring-context-4.0.0.RELEASE-jar
  3. spring-core-4.0.0.RELEASE,jar
  4. spring-expression-4.0.0.RELEASE.jar
  5. commons-logging-1.1.3.jar(日志)
2、传统方法与控制反转的对比
  • 接口方法
public interface UserService {
    public void sayHello();
}
  • 实现类
public class UserServiceImpl implements UserService {

    // 添加属性
    private String name;

    @Override
    public void sayHello() {System.out.println("Hello Spring" + name);}

    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
}
  • Spring配置文件:applicationContext.xml
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!-- UserService的创建权交给了Spring -->
    <bean id="userService" class="com.moc.ioc.demo1.UserServiceImpl">
        <!-- 设置属性(依赖注入DI) -->  
        <property name="name" value="小明"></property>
    </bean>
</beans>
  • 传统开发方法与控制反转
public class SpringDemo1 {
    // 传统开发方法
    @Test
    public void demo1() {
        // 接口实现类
        //UserService userService = new UserServiceImpl();
        // 需要设置属性时不能使用接口实现类
        UserServiceImpl userService = new UserServiceImpl();
        // 设置属性
        userService.setName("小明");
        userService.sayHello();
    }

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