前言
现实生活我们需要的的电脑来自于工厂,需要的水杯来自于工厂;
SpringIOC容器就相当于1个万能加工厂,可以创造出各式各样的对象;
我们只需要向这个万能工厂提交需求参数,索要对象即可。
Spring IOC容器通过接口+工厂模式,实现了程序中调用方和被调用方的解耦,使我们可以构建出高内聚、低耦合的Web应用;
Spring的核心是
- IOC: Inverse Of Control即反转控制
- AOP:Aspect Oriented Programming即面向切面编程)
1.Spring特点
Spring功能大而全:相当于Python中的Django,在Web 3层架构中都有自己的解决方案;
- web层 : Springmvc
- service层 : Spring
- dao层 : SpringJdbc
轻量级:只启动Spring核心容器的时候,占用的内存少,耗费的资源少
开源:源代码开放
二、Spring IOC
从整个Spring架构图中看到Core Container是整个Spring框架的地基;
Core Container也叫Spring IOC容器;
SpringIOC容器包含:Beans、Core、Context、SpEL;
接下来将从Spring的地基开始慢慢渗透学习Spring框架;
1.SpringIOC介绍
而这个工厂就是Spring的IOC容器,也就是以后调用方调用被调用方的对象不再自己创建,而是直接向SpringIOC容器要,这种思想就是控制反转即IOC;
2. IOC(控制反转)思想
控制反转:是一种设计思想,它的目的是指导我们设计出更加松耦合的程序;
控制:指的是被调用方对象的控制权,现在可以简单理解为被调用方实现类对象的创建权;
反转:指被调用方实现类对象的控制权,由调用方主动控制(new),反转为由SpringIOC容器代为创建和控制;
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>
------------------------------------------------------------------------------------------
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(); } }
4.Spring IOC相关API
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类型从容器中查找对象
参考