Spring ioc容器介绍
admin
2023-02-14 01:00:06
0

1 BeanFactory与ApplicationContext区别

Spring ioc容器介绍

BeanFactory是Spring框架中IoC容器的顶层接⼝,它只是⽤来定义⼀些基础功能,定义⼀些基础规范,⽽ApplicationContext是它的⼀个⼦接⼝,所以ApplicationContext是具备BeanFactory提供的全部功能的。
通常,我们称BeanFactory为SpringIOC的基础容器,ApplicationContext是容器的⾼级接⼝,⽐BeanFactory要拥有更多的功能,⽐如说国际化⽀持和资源访问(xml,java配置类)等等

Spring ioc容器介绍

        启动 IoC 容器的⽅式:

        * Java环境下启动IoC容器
            ①ClassPathXmlApplicationContext:从类的根路径下加载配置⽂件(推荐使⽤)
            ②FileSystemXmlApplicationContext:从磁盘路径上加载配置⽂件
            ③AnnotationConfigApplicationContext:纯注解模式下启动Spring容器

        * Web环境下启动IoC容器
            ①从xml启动容器
                                
                        
                        Archetype Created Web Application
                        
                        
                        contextConfigLocation
                        classpath:applicationContext.xml
                        
                        
                        
                        org.springframework.web.context.ContextLoaderListener
                        
                        

                ②从配置类启动容器
                                             
                        
                        Archetype Created Web Application
                        
                        
                        contextClass
                        org.springframework.web.context.support.AnnotationConfigWebAppli
                        cationContext
                        
                        
                        
                        contextConfigLocation
                        com.lagou.edu.SpringConfig
                        
                        
                        
                        org.springframework.web.context.ContextLoaderListener
                        
                        

2 纯xml模式
xml ⽂件头

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">

            实例化Bean的三种⽅式
            ⽅式⼀:使⽤⽆参构造函数
            在默认情况下,它会通过反射调⽤⽆参构造函数来创建对象。如果类中没有⽆参构造函数,将创建失败。

            ⽅式⼆:使⽤静态⽅法创建
            在实际开发中,我们使⽤的对象有些时候并不是直接通过构造函数就可以创建出来的,它可能在创建的过程 中会做很多额外的操作。此时会提供⼀个创建对象的⽅法,恰好这个⽅法是static修饰的⽅法,即是此种情 况。
            例如,我们在做Jdbc操作时,会⽤到java.sql.Connection接⼝的实现类,如果是mysql数据库,那么⽤的就 是JDBC4Connection,但是我们不会去写 JDBC4Connection connection = new JDBC4Connection() ,因 为我们要注册驱动,还要提供URL和凭证信息,⽤ DriverManager.getConnection ⽅法来获取连接。

           ⽅式三:使⽤实例化⽅法创建
此种⽅式和上⾯静态⽅法创建其实类似,区别是⽤于获取对象的⽅法不再是static修饰的了,⽽是类中的⼀ 个普通⽅法。此种⽅式⽐静态⽅法创建的使⽤⼏率要⾼⼀些。
在早期开发的项⽬中,⼯⼚类中的⽅法有可能是静态的,也有可能是⾮静态⽅法,当是⾮静态⽅法时,即可 采⽤下⾯的配置⽅式:
            
        
        

3.Bean的X及⽣命周期
作⽤范围的改变
在spring框架管理Bean对象的创建时,Bean对象默认都是单例的,但是它⽀持配置的⽅式改
变作⽤范围。作⽤范围官⽅提供的说明如下图:

Spring ioc容器介绍

    在上图中提供的这些选项中,我们实际开发中⽤到最多的作⽤范围就是singleton(单例模式)和prototype(原型模式,也叫多例模式)。配置⽅式参考下⾯的代码:
        
        
        
        
        
        
        
        

不同作⽤范围的⽣命周期
单例模式:singleton
对象出⽣:当创建容器时,对象就被创建了。
对象活着:只要容器在,对象⼀直活着。
对象死亡:当销毁容器时,对象就被销毁了。
⼀句话总结:单例模式的bean对象⽣命周期与容器相同。
多例模式:prototype
对象出⽣:当使⽤对象时,创建新的对象实例。
对象活着:只要对象在使⽤中,就⼀直活着。
对象死亡:当对象⻓时间不⽤时,被java的垃圾回收器回收了。
⼀句话总结:多例模式的bean对象,spring框架只负责创建,不负责销毁。

Bean标签属性
在基于xml的IoC配置中,bean标签是最基础的标签。它表示了IoC容器中的⼀个对象。换句话说,如果⼀个对象想让spring管理,在XML的配置中都需要使⽤此标签配置,Bean标签的属性如下:
id属性: ⽤于给bean提供⼀个唯⼀标识。在⼀个标签内部,标识必须唯⼀。
class属性:⽤于指定创建Bean对象的全限定类名。
name属性:⽤于给bean提供⼀个或多个名称。多个名称⽤空格分隔。
factory-bean属性:⽤于指定创建当前bean对象的⼯⼚bean的唯⼀标识。当指定了此属性之后,class属性失效。
factory-method属性:⽤于指定创建当前bean对象的⼯⼚⽅法,如配合factory-bean属性使⽤,则class属性失效。如配合class属性使⽤,则⽅法必须是static的。
scope属性:⽤于指定bean对象的作⽤范围。通常情况下就是singleton。当要⽤到多例模式时,可以配置为prototype。  init-method属性:⽤于指定bean对象的初始化⽅法,此⽅法会在bean对象装配后调⽤。必须是⼀个⽆参⽅法。
destory-method属性:⽤于指定bean对象的销毁⽅法,此⽅法会在bean对象销毁前执⾏。它只能为scope是singleton时起作⽤。

4.DI 依赖注⼊的xml配置
依赖注⼊分类

  • 按照注⼊的⽅式分类
    构造函数注⼊:顾名思义,就是利⽤带参构造函数实现对类成员的数据赋值。
    set⽅法注⼊:它是通过类成员的set⽅法实现数据的注⼊。(使⽤最多的)

  • 按照注⼊的数据类型分类
    基本类型和String
    注⼊的数据类型是基本类型或者是字符串类型的数据。
    其他Bean类型
    注⼊的数据类型是对象类型,称为其他Bean的原因是,这个对象是要求出现在IoC容器
    中的。那么针对当前Bean来说,就是其他Bean了。
    复杂类型(集合类型)
    注⼊的数据类型是Aarry,List,Set,Map,Properties中的⼀种类型。

依赖注⼊的配置实现之构造函数注⼊ 顾名思义,就是利⽤构造函数实现对类成员的赋值。它的使⽤要求是,类中提供的构造函数参数个数必须和配置的参数个数⼀致,且数据类型匹配。同时需要注意的是,当没有⽆参构造时,则必须提供构造函数参数的注⼊,否则Spring框架会报错。

相关内容

热门资讯

人民锐评:中国籍数学家首获全球... 历史性的突破!日前,第二十一届菲尔兹奖得主名单揭晓,北大2007级本科校友王虹、邓煜双双获奖,无数网...
深度专访|网易智企段毓铮:不敢... 企业AI的商业化,难点在于让客户敢用、会用、用得有效果。在WAIC现场,搜狐AI邀请到网易智企副总经...
来论|从“菲尔兹奖”,看见科技... 王虹、邓煜分别凭借在调和分析与几何测度论、偏微分方程与数学物理领域的突破性工作,共同荣获2026年菲...
当清洁机器人爬上窗户,能否开启... 过去十年,清洁机器人的故事,几乎都发生在地面上。 扫地、拖地、洗地,从随机碰撞到激光导航,从人工洗抹...
冰箱通电发烫压缩不启动不制冷什... 1、很有可能是因为冰箱的压缩机内高压输出缓冲管出现了断裂,造成高压管不排气,低压管不吸气的这种状况,...
冰箱能通电但是不制冷什么问题 1、电源问题先检查冰箱的电源,看电源的连接是否正常,插头是否通电,插稳。插好插头之后,可以看一下冰箱...
洗衣机通电为什么不转动 导致这类问题一般有这几种情况:可能是进水电磁阀故障导致,若电磁阀已得电还不进水,就是电磁阀的阀芯被卡...
海尔洗衣机不转动了但是会流水 洗衣机可以进水说明电磁阀工作正常;能排水,说明排水泵是正常。洗衣机电源是没有问题的,但是不转动说明洗...
全球首个5G鲁班工坊莫斯科结硕... 【原标题】全球首个5G鲁班工坊莫斯科结硕果 文/本报记者 黄河 刘恺 李鲲 宋瑞 从渤海之滨到莫斯科...
西门子滚筒洗衣机不启动嗒嗒响 1、可能是因为启动电容器的问题导致的不启动;2、可能是因为皮带松弛和打滑的原因;3、可能是因为棘爪和...