Spring5系列(IOC的使用)

Spring5系列(IOC的使用)

spring5的下载地址

什么是IOC?

  • 控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理
  • 使用 IOC 目的:为了耦合度降低

ioc的基本使用

  1. 在spring-framework-5.2.13.RELEASE文件中的lib目录中找到spring5的相关jar包,并导入到idea的lib目录下,如下:
    spring5相关的jar包
  2. 创建普通类,在这个类创建普通方法User类
  3. 创建 Spring 配置文件bean1.xml,在配置文件(bean1.xml)配置创建的对象在这里插入图片描述
    在这里插入图片描述
  4. 进行测试代码编写
    public void testBean(){
    //读取spring的配置文件(这里是bean1.xml)
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        //第一个参数是配置文件的id值。第二个参数是要获取的对象的Class类
        User user = context.getBean("user", User.class);
        //这里即可调用User的add方法
        user.add();
    }

1. IOC 底层原理(xml 解析、工厂模式、反射)

IOC的过程

  1. xml配置文件,创建配置的对象ioc的第一步
  2. 通过工厂类创建对象
    ioc第二步

2. IOC(BeanFactory 接口)

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

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

    BeanFactory:IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用( 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象)

    ApplicationContext:BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人
    员进行使用(加载配置文件时候就会把在配置文件对象进行创建,这使得我们开发的程序更加快速)

  3. ApplicationContext 接口有实现类在这里插入图片描述

3. IOC 操作 Bean 管理(基于 xml 方式)

什么是bean管理

  1. Spring 创建对象

  2. Spirng 注入属性

  3. 基于 xml 方式创建对象(创建对象时候,默认也是执行无参数构造方法完成对象创建)基于 xml 方式创建对象
    在 bean 标签有很多属性,介绍常用的属性:

id 属性:唯一标识
class 属性:类全路径(包类路径)

  1. 基于 xml 方式注入属性

3.1 第一种注入方式:使用 set 方法进行注入

  1. 创建Book类,并提供他的属性的set方法在这里插入图片描述

  2. 在配置文件中注入属性set注入

3.2 第二种注入方式:使用有参数构造进行注入

  • 在配置文件中通过参数构造注入属性
    在这里插入图片描述

3.3 p 名称空间注入

p注入

3.4 xml 注入其他类型属性

  • 注入字面量

    1. null 值null值注入
    2. 属性值包含特殊符号(把内容写到CDATA)
      在这里插入图片描述
  • 注入属性-外部 bean

  • 我们创建一个Dept对象(注意里面要有属性的set方法),他里面有User类属性:
    Dept类

  • 在配置文件配置对象在这里插入图片描述

  • 注入属性-内部 bean

  1. 我们先创建两个类(Student) 和 (School)(他们有属性对应的set方法)
    Student 和 School
  2. 在配置文件配置对象在这里插入图片描述
  • 注入属性-级联赋值
  1. 第一种写法(有点像外部bean注入的方式)在这里插入图片描述
  2. 第二种写法
    1. 先给Student类增加School属性的get方法get方法
    2. 在配置文件配置对象级联2

3.5 xml 注入集合属性

  1. 我们先创建一个CollectionBean,里面有各种的集合属性CollectionBean
  2. 我们在spring配置文件中配置CollectionBean,并为他注入集合属性
    集合注入
    如果要在集合里面设置对象类型值
    1. 我们先在CollectionBean里面设置泛型为School的属性和对应的set方法schoolList
    2. 我们在spring配置文件中配置CollectionBean,并为他注入List集合(存放的是对象)注入对象到List
      当我们如果要把一个集合注入到多个不同的对象中时我们可以使用 util 标签完成 list 集合注入提取
  3. 在 spring 配置文件中引入名称空间 utilutil配置
  4. 在 spring 配置文件给注入提取出的list集合提取list然后注入

3.6 FactoryBean

  1. Spring 有两种类型 bean,一种普通 bean,另外一种工厂 bean(FactoryBean
  2. 普通 bean:在配置文件中定义 bean 类型就是返回类型
  3. FactoryBean:在配置文件定义 bean 类型可以和返回类型不一样
    FactoryBean的使用:
    1. 创建类,让这个类作为工厂 bean,实现接口 FactoryBean;实现接口里面的方法,在实现的方法中定义返回的 bean 类型FactoryBean实现类
    2. 在配置文件中配置FacctoryBean配置FacctoryBean
    3. 测试测试

3.7 bean 作用域

  1. 在 Spring 里面,默认情况下,bean 是单实例对象在这里插入图片描述
  2. 设置bean 为多实例对象
    bean标签里的scope属性:

    默认值,singleton:表示是单实例对象
    prototype:表示是多实例对象
    在这里插入图片描述
    singleton 和 prototype 区别

  3. singleton 单实例,prototype 多实例
  4. 设置 scope 值是 singleton 时候,加载 spring 配置文件时候就会创建单实例对象;设置 scope 值是 prototype 时候,不是在加载 spring 配置文件时候创建 对象,在调用
    getBean 方法时候创建多实例对象

3.8 bean 生命周期

  1. 通过构造器创建 bean 实例(无参数构造)
  2. 为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
  3. 把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization
  4. 调用 bean 的初始化的方法(需要进行配置初始化的方法)
  5. 把 bean 实例传递 bean 后置处理器的方法 postProcessAfterInitialization
  6. bean 可以使用了(对象获取到了)
  7. 当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)

现在我们定义一个Life类来看一下Bean的生命周期的具体过程Life类
然后我们演示添加后置处理器MyBeanPost,让他实现BeanPostProcessor接口,并实现BeanPostProcessor里的方法MyBeanPost
然后我们测试一下:测试
注意我们每创建一个Bean实例都会执行后置处理器的两个方法一次

3.9 xml 自动装配

  • 什么是自动装配
    根据指定装配规则(属性名称或者属性类型),Spring 自动将匹配的属性值进行注入
  • 下面演示一下自动装配自动装配

3.10 外部属性文件配置

若我们现在要配置数据库信息我们有两种方式:

3.10.1 第一种:直接配置数据库信息
  • 引入德鲁伊连接池依赖 jar 包
  • 然后在spring配置文件中配置数据库连接池的信息如下: 在这里插入图片描述
3.10.2 第二种:在 spring 配置文件使用标签引入外部属性文件
  • 我们先引入 context 名称空间context
  • 在 spring 配置文件使用标签引入外部属性文件jdbcBean

4. IOC 操作 Bean 管理(基于注解方式)

4.1一. 什么是注解

  1. 注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…)
  2. 使用注解,注解作用在类上面,方法上面,属性上面
  3. 使用注解目的:简化 xml 配置

4.2 二.Spring 针对 Bean 管理中创建对象提供的注解如下

下面四个注解功能是一样的,都可以用来创建 bean 实例:

  1. @Component
  2. @Service:最好用在service层
  3. @Controller:最好用在web层
  4. @Repository:最好用在dao层

4.3 三.基于注解方式实现对象创建

  1. 我们先引入需要用的jar包到lib目录下jar包
  2. 第二步,在配置文件中开启组件扫描
    base-package属性为要扫描的包
    组件扫描
  3. 创建类,在类上面添加创建对象注解注解
  4. 我们测试一下:(测试成功)测试

4.4 关于开启组件扫描细节配置

扫描细节

4.5 基于注解方式实现属性注入

  1. @Autowired:根据属性类型进行自动装配
    第一步:在School和Student类中创建对象注解在这里插入图片描述在这里插入图片描述
    第二步:在Student类的school属性上面添加**@Autowired**,并且该属性不需要添加 set 方法
  2. @Value:注入普通类型属性。如上两个图片**@Value**注解表示直接注入普通类型
  3. @Qualifier:根据名称进行注入,和上面**@Autowired** 一起使用在这里插入图片描述
  4. @Resource:可以根据类型注入,可以根据名称注入在这里插入图片描述

4.6 完全注解开发

  1. 我们先创建一个配置类,替代 xml 配置文件在这里插入图片描述
  2. 然后编写一个测试类测试一下测试成功
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值