Spring5笔记1之浅识Spring框架IOC容器底层原理

967 阅读3分钟

一、入门案例

1.下载

官网:spring.io/

可直接访问下载网址:repo.spring.io/ui/native/r…

第一步:

image-20220227181557405

第二步:

image-20220227181701207

第三步:

image-20220227181851984

第四步:

image-20220227181916576

第五步:

image-20220227182609774

第六步:

image-20220227182958960

第七步:

image-20220227183035642

注:由于本人现在已会使用maven进行项目管理,则使用maven来构建Spring项目,而不是用上方下载jar导入项目的方式

2.项目创建

第一步:

image-20220301201231373

第二步:

image-20220301201351320

第三步:

image-20220301200616590

第四步:

image-20220301202711022

第五步:

image-20220301203024594

第六步:

编写测试代码,点击进行测试

image-20220301204420285

由于刚学习不太懂导致在测试时报出以下异常:(这是由于运行时找不到Spring配置文件造成的)image-20220301204519561

解决方法:

image-20220301210622099

解决方法参考博客:blog.csdn.net/qq_32575047…

blog.csdn.net/weixin_3990…

测试通过结果:

image-20220301210735063

二、IOC

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

1.IOC 底层原理

  • xml 解析
  • 工厂模式
  • 反射

image-20220301220541819

image-20220301221203917

IOC底层原理的实现例子:

image-20220301221642352

2.IOC接口

1、IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂

2、Spring 提供 IOC 容器实现两种方式:(两个接口)

  • BeanFactory:IOC 容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用

    • 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
  • ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用

    • 加载配置文件时候就会把在配置文件对象进行创建(虽然这种方式会浪费时间,但我们仍使用这种方式,因为我们应该把耗时的操作留给服务器来进行,而不应该让程序在使用时来耗时)

3、ApplicationContext 接口主要是有以下两个实现类

image-20220301224329322

public class TestSpring5 {
    @Test
    public void testAdd(){
        //1.加载Spring配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        //2.获取配置文件创建的对象
        User user = context.getBean("user", User.class);
        System.out.println(user);
        user.add();
    }
}
在上方测试程序中,加载Spring配置文件时,若使用FileSystemXmlApplicationContext类则在传参时应该使用“Spring配置文件在盘符中的位置”即盘符路径作为参数;若使用ClassPathXmlApplicationContext类则应使用类路径即classpath作为参数

具体实现说明如下:

image-20220301230003760

image-20220301230120528

image-20220301230420412

4、BeanFactory接口

image-20220301231315597

从今天的学习中可以发现,Spring的主要技术就是Java的反射机制了,所以在后面如果对反射不是很清楚的话还得再复习一下。另外,笔记是跟着视频边看边做的,只不过是在自己动手实现后的情况下加上了一些便于自己理解的话,比较粗略,后面还会继续更新哒😃

今天的学习笔记到这里就结束了!!