spring|spring IOC控制反转原理详解

目录

  • IOC概念
    • 补:工厂模式和单例模式区别
  • IOC接口——实现IOC容器
    • 1.BeanFactory
    • 2.ApplicationContext
  • IOC操作管理Bean
    • xml配置bean
      • 工厂Bean和普通Bean
    • 注解配置bean
      • 注册Bean
      • 使用Bean
  • Bean的配置
    • 作用域:如何设置bean的单例or多例
      • 生命周期:创建到销毁
      • Bean扫描
        • 总结

          IOC概念
          • 定义:控制反转,把对象的创建和调用(传统方式是通过new之后直接使用对象),交给Spring进行管理(依靠对象工厂通过注入的方式获取对象)
          • 降低耦合度
          • 底层原理:xml解析、工厂模式、反射
          spring|spring IOC控制反转原理详解
          文章图片


          补:工厂模式和单例模式区别
          单例模式(懒汉式,饿汉式)都只能创建一个指定类的唯一对象
          工厂模式(一个接口,多态性的体现)可以创建该接口的工厂下的所有类的唯一对象
          【spring|spring IOC控制反转原理详解】
          IOC接口——实现IOC容器 IOC容器可以有多个,new几个就有几个IOC容器,一个容器绑定一个xml文件,一个xml中可以配置多个bean,容器可以关闭
          spring|spring IOC控制反转原理详解
          文章图片


          1.BeanFactory
          • Spring的内部接口,不建议开发者使用
          • 懒汉式,加载配置文件的时候不创建对象

          2.ApplicationContext
          • BeanFactory的子接口
          • 功能更强大,建议开发者使用
          • 饿汉式,加载配置文件即创建对象
          • 由于创建对象会耗费时间和资源,因此饿汉式可以把时间开销放在项目启动时
          spring|spring IOC控制反转原理详解
          文章图片

          第三个是基于注解的获取容器方式,利用反射而非解析xml配置
          SpringBoot中获取ApplicationContext的三种方式
          1.@Autowired: 在任意被spring托管的类中注入
          2.ApplicationContextAware接口:实现这个接口可以在普通类中获取Spring的IOC容器

          IOC操作管理Bean
          xml配置bean
          在bean.xml中配置了bean的属性后,先解析xml得到IOC接口对象(IOC容器),然后通过容器来getBean,获得对象
          spring|spring IOC控制反转原理详解
          文章图片

          同时,ApplicationContext也可以换成其父接口BeanFactory,结果不受影响
          DI:依赖注入(注入属性)
          两种方法
          set方法+property
          spring|spring IOC控制反转原理详解
          文章图片

          有参构造+constructor
          spring|spring IOC控制反转原理详解
          文章图片


          工厂Bean和普通Bean spring|spring IOC控制反转原理详解
          文章图片


          注解配置bean

          注册Bean 以下5个注解都可以创建Bean对象交给Spring的IOC容器进行管理
          • @Component:以下4个的元注解
          • @Service
          • @Controller
          • @Repository
          • @Configuration
          因为元注解Component可以指定value=https://www.it610.com/article/“别名”,所以以上5种注册Bean的方式都可以起别名,一个接口多个实现类Bean的情况需要起别名,否则Spring无法判断获取哪个Bean

          使用Bean
          • @Autowired:根据类自动装配
          • @Qualifier:根据别名装配,要和@Autowired搭配使用
          • @Resource:即可根据类也可根据别名
          • @Value:注入普通类型属性
          spring|spring IOC控制反转原理详解
          文章图片


          Bean的配置
          作用域:如何设置bean的单例or多例
          scope属性值:(常用singleton和prototype)
          • singleton:默认值,单例对象,饿汉式
          • prototype:多实例对象,懒汉式
          • request请求、session会话:不常用
          在bean.xml中或者@Bean(scope="")中配置

          生命周期:创建到销毁
          1.无参构造
          2.调用set方法解析配置
          3.调用bean的初始化方法
          如果有配置了初始化方法,需要配置init-method=“初始化方法的名称”
          例如:在@Bean(initmethod=“xxx方法”)
          4.获取bean并使用
          注解方法可以直接@Autowired注入bean,配置xml的方式通过
          new ClassPathXmlApplicationContext(xxxx.xml)解析并获取IOC容器之后getBean
          5.bean的销毁与销毁时方法
          springboot中的bean创建与销毁
          销毁方法的配置@Bean(destroyMethod = “xxxxx”)
          如果是配置在xml中,则

          xml配置的Bean的关闭:关闭IOC容器即可
          spring|spring IOC控制反转原理详解
          文章图片


          Bean扫描 spring中xml配置
          spring|spring IOC控制反转原理详解
          文章图片

          spring和springboot中的注解配置
          @ComponentScan
          spring|spring IOC控制反转原理详解
          文章图片

          • 被Component及其子注解标注的Bean需要用ComponentScan扫描到才能使用
          • SpringBootApplication启动类包括了@ComponentScan
          • @ComponentScan默认扫描该类包下的所有Bean
          • @ComponentScan可以自定义basePackages、includeFilters、excludeFilters

          总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

            推荐阅读