资讯详情

SpringIOC和Bean

SpringIOC和Bean

一、什么是IoC?

控制反转是面向对象编程的设计原则,以减少代码之间的耦合。最重要的方法之一是依赖注入(DI),通过控制逆转,当对象被创建时,调节系统中所有对象的外部实体将所有对象的引用传递给它。

二、IOC的原理

。给定一个字符串可以传输一个例子,并使用它set方法注入实例的依赖性;

关于java前面的文章已经学会了如何创建和执行对象。

在springIOC在中间,我们只需要在配置文件中给出一个类名字字符串,对象就会被创建出来。系统启动后,我们只需要直接声明对象,不需要自己使用new。IOC通过反射调用法setText方法完成依赖注入(赋值对象属性)。

BeanFactory

  1. 定义:

    BeanFactory定义了IOC提供最基本的容器形式IOC容器应遵守的最基本的接口是SpringIOC最底层和最基本的编程规范。spring中,BeanFactory只是一个接口,并不是IOC具体实现容器,如DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等,都是对BeanFactory该接口附加了某种功能的实现。

  2. 界面定义的方法

    [外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-iIiE7Qy7-1653380658875)(C:\Users\Leejie\Desktop\leejie\笔记\image\1653294080502.png)]

  3. BeanFactory作用

    在spring中间,所有对象bean所有生产beanFactory实例化,beanFactory可以实例化bean的过程中对bean做一些额外的处理。beanFactory会在bean的各阶段中对bean并进行各种管理spring通过各种接口将这些阶段暴露给我们,让我们对bean做各种处理,我们只需要让bean实现相应的接口,然后spring就会在bean生命周期调用我们实现的理生命周期bean。

    关于BeanFactory生成bean看看这篇文章的过程:https://blog.csdn.net/qq_36688143/article/details/84968036

ApplicationContext

应用上下文,继承BeanFactory接口,它是Spring更先进的容器提供了更多的功能。

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-P84MD1v9-1653380658876)(C:\Users\Leejie\Desktop\leejie\笔记\image\0524ApplicationContext.png)]

ApplicationContext继承了在此基础上,界面也通过其他界面扩展BeanFactory的功能。

:允许容器具有发布和应用上下文事件的功能,包括启动和关闭容器事件。

:为应用提供i18N国际新闻访问功能。

:通过带前缀的资源加载资源Ant资源文件路径装载风格Spring配置文件。

ApplicationContext两大实现类:

  • ClassPathXmlApplicationContext
  • FileSystemXmlApplicationContext

通过这两个实现类可以读取配置bean的xml并获得文件bean对象。

装载bean的区别:

BeanFactory在初始化容器中,没有实例化Bean,直到第一次访问某个Bean实例化目标的时间Bean。 ApplicationContext所有单实例将在初始化应用上下文中实例化Bean,还可以为Bean配置lazy-init=true来让Bean延迟实例化。

Bean生命周期

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-b5ZWYQ5U-1653380658876)(C:\Users\Leejie\Desktop\leejie\笔记\image\bean生命周期.jpg)]

  1. 实例化bean对象(通过结构或工厂)
  2. 设置对象属性(setter等)(依赖注入)
  3. 如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。
  4. 如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂本身
  5. 将Bean实例传递给Bean前置处理器postProcessBeforeInitialization(Object bean, String beanname)方法
  6. 调用Bean初始化方法
  7. 将Bean实例传递给Bean的后置处理器的postProcessAfterInitialization(Object bean, String beanname)方法
  8. 使用Bean
  9. 调用前关闭容器Bean的销毁方法

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-NtPGSRBT-1653380658877)(C:\Users\Leejie\Desktop\leejie\笔记\image\bean.png)]

Bean作用域

Spring中的bean默认是单例,对Web应用来说,Web为每个用户的请求创建一个单独的容器Servlet引入线程处理请求Spring每个框架后面Action都是单例,所以对spring托管的单例Service bean,Spring的单例是基于BeanFactory的,单例bean在spring只有一个容器,Java以单例为基础JVM,每个JVM里面只有一个例子。

类别 说明
singleton 在spring IOC容器中只有一个bean实例,bean以单例的形式存在,默认值
prototype 每次从容器中调用bean回到一个新的例子。
request 每次HTTP所有的请求都会创造新的bean,该功能域只适用于WebApplicationContext环境
session 同一个HTTP Session 共享一个bean,不同Session使用不同bean,仅适用于WebApplicationContext环境
globalSession 一般用于Protlet该功能域仅适用于应用环境WebApplicationContext环境
  1. 当一个bean的作用域为singleton,那么Spring IOC容器只有一个共享bean例子,而且都是对的bean请求,只要id与该bean定义匹配只会返回bean同样的例子。
  2. 当一个bean的作用域为Prototype,表示一个bean对应多个对象实例的定义。Prototype作用域的bean每次都会导致这个bean请求(注入另一个请求)bean以程序的形式调用容器getBean()方法)创建新的bean实例。Prototype它是一种原型,当我们创建容器时,它不是实例化的,而是当我们获得它时bean只有创建一个对象,我们每次得到的对象都不是同一个对象。
<bean id
        
         =
         "life_singleton
         "
         class="com.bean.LifeBean" scope="singleton" init-method="init" destroy-method="destory" lazy-init="true"/>

标签: iiie压力变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台