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解析、工厂模式、反射

          补:工厂模式和单例模式区别

          单例模式(懒汉式,饿汉式)都只能创建一个指定类的唯一对象

          工厂模式(一个接口,多态性的体现)可以创建该接口的工厂下的所有类的唯一对象

          IOC接口——实现IOC容器

          IOC容器可以有多个,new几个就有几个IOC容器,一个容器绑定一个xml文件,一个xml中可以配置多个bean,容器可以关闭

          1.BeanFactory

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

          2.ApplicationContext

          • BeanFactory的子接口
          • 功能更强大,建议开发者使用
          • 饿汉式,加载配置文件即创建对象
          • 由于创建对象会耗费时间和资源,因此饿汉式可以把时间开销放在项目启动时

          第三个是基于注解的获取容器方式,利用反射而非解析xml配置

          SpringBoot中获取ApplicationContext的三种方式

          1.@Autowired: 在任意被spring托管的类中注入

          2.ApplicationContextAware接口:实现这个接口可以在普通类中获取Spring的IOC容器

          IOC操作管理Bean

          xml配置bean

          在bean.xml中配置了bean的属性后,先解析xml得到IOC接口对象(IOC容器),然后通过容器来getBean,获得对象

          同时,ApplicationContext也可以换成其父接口BeanFactory,结果不受影响

          DI:依赖注入(注入属性)

          两种方法

          set方法+property

          有参构造+constructor

           工厂Bean和普通Bean

          注解配置bean

          注册Bean

          以下5个注解都可以创建Bean对象交给Spring的IOC容器进行管理

          • @Component:以下4个的元注解
          • @Service
          • @Controller
          • @Repository
          • @Configuration

          因为元注解Component可以指定value=“别名”,所以以上5种注册Bean的方式都可以起别名,一个接口多个实现类Bean的情况需要起别名,否则Spring无法判断获取哪个Bean

          使用Bean

          • @Autowired:根据自动装配
          • @Qualifier:根据别名装配,要和@Autowired搭配使用
          • @Resource:即可根据类也可根据别名
          • @Value:注入普通类型属性

          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中,则

          <bean id="  " class="   " destroy-method="   "></bean>

          xml配置的Bean的关闭:关闭IOC容器即可

          Bean扫描

          spring中xml配置

          spring和springboot中的注解配置

          @ComponentScan

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

          总结

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

          本文转自网络,如有侵权请联系客服删除。