前言

现实生活我们需要的的电脑来自于工厂,需要的水杯来自于工厂;

SpringIOC容器就相当于1个万能加工厂,可以创造出各式各样的对象;

我们只需要向这个万能工厂提交需求参数,索要对象即可。

Spring IOC容器通过接口+工厂模式,实现了程序中调用方和被调用方的解耦,使我们可以构建出高内聚、低耦合的Web应用;

 

一、Spring介绍

Spring的核心是

  • IOC:  Inverse Of Control即反转控制
  • AOP:Aspect Oriented Programming即面向切面编程)

 

1.Spring特点

Spring功能大而全:相当于Python中的Django,在Web 3层架构中都有自己的解决方案

  • web层 :    Springmvc
  • service层 : Spring
  • dao层 : SpringJdbc

轻量级:只启动Spring核心容器的时候,占用的内存少,耗费的资源少

开源:源代码开放

 

 

2.Spring架构图

 

 

二、Spring IOC

从整个Spring架构图中看到Core Container是整个Spring框架的地基;

Core Container也叫Spring IOC容器;

SpringIOC容器包含:Beans、Core、Context、SpEL;

接下来将从Spring的地基开始慢慢渗透学习Spring框架;

 

1.SpringIOC介绍

被调用方实现类对象的创建由原来的调用方使用new关键字创建转变成了从工厂中获取,而被调用方实现类对象的创建过程由工厂内部来实现

而这个工厂就是Spring的IOC容器,也就是以后调用方调用被调用方的对象不再自己创建,而是直接向SpringIOC容器要,这种思想就是控制反转即IOC;

 

2. IOC(控制反转)思想

控制反转:是一种设计思想,它的目的是指导我们设计出更加松耦合的程序;

控制:指的是被调用方对象的控制权,现在可以简单理解为被调用方实现类对象的创建权;

反转:指被调用方实现类对象的控制权,由调用方主动控制(new),反转为由SpringIOC容器代为创建和控制;

Spring IOC 容器的本质:切换和反转了被调用方实现类对象的获取方式,由调用方直接new,变成了调用方间接向SpringIOC容器要;

控制反转的前提:Spring配置文件中,已经配置了调用方需要的被调用方实现类

 

3.Spring IOC应用

使用Spring的IOC容器实现service层(调用方)和dao层(被调用方)的解耦;

<?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">
    <!--
        声明当前springIOC要创建的对象
       id:创建好的对象放入SpringIOC容器之后的标识
       class:创建本对象需要使用的实现类
      -->
    <bean id="UserDao" class="com.zhanggen.dao.impl.UserDaoImpl">
        <!-- collaborators and configuration for this bean go here -->
    </bean>


</beans>
applicationContext.xml

 ------------------------------------------------------------------------------------------

package com.zhanggen.sercive.impl;

import com.zhanggen.dao.UserDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserServiveImpl {
    //测试从springIOC容器中获取dao层实现类对象
    @Test
    public void test1() {
        //1.读取配置文件,初始化SpringIOC容器
        ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");

        //2.从SpringIOC容器中获取对象,并调用对象的方法
        UserDao userDao = (UserDao) act.getBean("UserDao");
        userDao.save();
    }
}
UserServiveImpl.java

 

4.Spring IOC相关API

 

4.1.两个接口

BeanFactory和ApplicationContext接口功能有哪些不同? 

A.BeanFactory

这是SpringIOC容器的顶级接口,它定义了SpringIOC的最基础的功能,但是其功能比较简单,一般面向Spring自身使用
BeanFactroy在第1次使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化

B.ApplicationContext

这是在BeanFactory基础上衍生出的接口,它扩展了BeanFactory的功能,一般面向程序员使用
ApplicationContext是在容器启动时,一次性创建并加载了所有的Bean;

注意: 上面两种方式创建的对象都是单例,只是创建对象的时机不同

 

4.2.三个实现类

这三个实现类的作用都是:读取配置文件, 初始化Spring的IOC容器, 不一样的是加载配置文件的位置

  • ClassPathXmlApplicationContext 读取类路径下的xml作为配置文件
  • FileSystemXmlApplicationContext 读取本地目录下的xml作为配置文件
  • AnnotationConfigApplicationContext 读取一个注解配置作为配置文件

 

4.3.一个方法 

getBean() 用于从Spring容器中获取Bean对象,参数可以使用三种情况:

  • getBean("id") 使用bean的id从容器中查找对象
  • getBean(Bean.class) 使用bean的class类型从容器中查找对象
  • getBean("id", Bean.class) 使用bean的id 和 class类型从容器中查找对象

 

 

 

参考

posted on 2022-05-17 15:58  Martin8866  阅读(87)  评论(0编辑  收藏  举报