SSM(容器,Bean,依赖注入)

1.Spring系统架构

Data Access: 数据访问
Data Integration: 数据集成
Web: Web开发
AOP:面向切面编程
Aspects: AOP思想实现
Core Container: 核心容器
Test:单元测试与集成测试
在这里插入图片描述

2.核心概念(IoC,DI,Bean)

●代码书写现状(重复写实现类,数据层的实现类变了的话,要重新编译运行)
●耦合度偏高
●解决方案
●使用对象时, 在程序中不要主动使用new产生对象,转换为由外部提供对象
●IoC ( Inversion of Control )控制反转(可以管理大量的对象)
使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转(对象的创建控制权由程序转移到外部,这种思想称为控制反转)
●Spring技术对IoC思想进行了实现
Spring提供了一个容器,称为IoC容器,用来充当IoC思想中的外部
IoC容器负责对象的创建、初始化等一系列工作, 被创建或被管理的对象在IoC容器中统称为Bean
●DI ( Dependency Injection )依赖注入
●在容器中建 立bean与bean之间的依赖关系的整个过程,称为依赖注入
目标:充分解耦
●使用IoC容器管理bean (IoC)
●在IoC容器内将有依赖关 系的bean进行关系绑定(DI)
●最终效果
●使用对象时不仅可以直接从IoC容器中获取, 并且获取到的bean已经绑定了所有的依赖关系

总结:
IoC思想和DI思想
IoC容器
Bean
概括:IoC的思想就是用对象的时候不用new,而是由外部提供。Spring技术实现的时候就是通过IoC容器提供。DI思想就是把用关系的Bean绑好,这样运行的时候就不会少对象,可以完美的运行。Bean就是IoC创建和初始化的对象。

2.1IoC的入门案例

分析
1.管理什么? ( Service与Dao )
2.如何将被管理的对象告知IoC容器? (配置)
3. 被管理的对象交给IoC容器,如何获取到IoC容器? (接口)
4. IoC容器得到后 ,如何从容器中获取bean ? (接口方法)
5.使用Spring导入哪些坐标? ( pom . xml )
步骤:
①:导入Spring坐标(在pom.xml)
在这里插入图片描述

②:定义Spring管理的类(接口)
③:创建Spring配置文件,配置对应类作为Spring管理的bean .

<!--bean标签标示配置bean
    id属性标示给bean起名字
    class属性表示给bean定义类型-->

④:初始化IoC容器( Spring核心容器/Spring容器) , 通过容器获取bean

    public static void main(String[] args) {
        //3.创建并,初始化Ioc容器,ctx属于对象
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //4.获取Bean,是通过getBean()的方法
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        //5.通过对象调用方法
        bookDao.save();
    }
}

2.2DI的入门案例

分析
1.基于IoC管理bean
2. Service中使用new形 式创建的Dao对象是否保留? (否)
3. Service中需要的Dao对象如何进 入到Service中? (提供方法)
4. Service与Dao间的关系如何描述 ? (配置)
步骤
①:删除使用new的形式创建对象的代码
②:提供依赖对象对应的setter方法
③:配置service与dao之间的关系

<bean id="bookService" class="com..service.impl.BookServiceImpl">
        <!--7.配置server与dao的关系-->
        <!--property标签表示配置当前bean的属性
        name属性表示配置哪一个具体的属性
        ref属性表示参照哪一个bean-->
        <property name="bookDao" ref="bookDao"/>
    </bean>

2.3Bean的别名和作用范围的核心配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为什么bean默认为单例?
适合交给容器进行管理的bean
■表现层对象
■业务层对象
■数据层对象
■工具对象
不适合交给容器进行管理的bean
■封装实体的域对象

Bean的作用范围就是控制创建对象数量的

总结Bean配置
1.基础配置
id:命名:name:重命名,class:Bean的类型(全类名),scope:bean的作用范围(创建几个对象)

2.4实例化Bean的三种方式

第一种:构造方法
第二种:静态工厂
第三种:实例工厂
第四种:使用FactoryBean实例化Bean

2.5Bean的生命周期

生命周期:从创建到消亡_的完整过程
bean生命周期: bean从创建到销毁的整体过程
bean生命周期控制:在bean创建后到销毁前做一些事情
初始化容器
1.创建对象 (内存分配)
2.执行构造方法
3.执行属性注入( set操作)
4.执行bean初始化方法
使用bean
1.执行业务操作
关闭/销毁容器
1.执行bean销毁方法

2.6依赖注入的两种方式

思考:向一个类中传递数据的方式有几种?
1普通方法(set方法)
2.构造方法
思考:依赖注入描述了在容器中建立bean与bean之间依赖关系的过程, 如果bean运行需要的是数字或字符串呢?
■引用类型
■简单类型(基本数据类型与String )
依赖注入方式
■setter注入
简单类型
在这里插入图片描述

 引用类型
![在这里插入图片描述](https://img-blog.csdnimg.cn/da174ad1704e4c86964b6423d1f475f4.png)

■构造器注入
简单类型
在这里插入图片描述

引用类型
在这里插入图片描述

2.7依赖注入方式选择

1.强制依赖使用构造器进行 ,使用setter注入有概率不进行注入导致nu11对象出现
2.可选依赖使用setter注入进行 ,灵活性强
3. Spring框架倡导使用构造器 , 第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨
4.如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入
5.实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入
6.自己开发的模块推荐使用setter注入

2.8依赖自动装配

IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
自动装配方式
■按类型(常用)
在这里插入图片描述

■按名称
■按构造方法
■不启用自动装配

自动装配用于引用类型依赖注入, 不能对简单类型进行操作
使用按类型装配时( byType )必须保障容器中相同类型的bean唯一,推荐使用
使用按名称装配时( byName )必须保障容器中具有指定名称的bean , 因变量名与配置耦合, 不推荐使用
自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

2.9集合的注入

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
        <!--数组注入-->
        <property name="array">
            <array>
                <value>100</value>
                <value>200</value>
                <value>300</value>
            </array>
        </property>
        <!--list集合注入-->
        <property name="list">
            <list>
                <value>itcast</value>
                <value>itheima</value>
                <value>boxuegu</value>
                <value>chuanzhihui</value>
            </list>
        </property>
        <!--set集合注入-->
        <property name="set">
            <set>
                <value>itcast</value>
                <value>itheima</value>
                <value>boxuegu</value>
                <value>boxuegu</value>
            </set>
        </property>
        <!--map集合注入-->
        <property name="map">
            <map>
                <entry key="country" value="china"/>
                <entry key="province" value="henan"/>
                <entry key="city" value="kaifeng"/>
            </map>
        </property>
        <!--Properties注入-->
        <property name="properties">
            <props>
                <prop key="country">china</prop>
                <prop key="province">henan</prop>
                <prop key="city">kaifeng</prop>
            </props>
        </property>
    </bean>

3.容器

创建容器

        //1.加载类路径下的配置文件
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.从文件系统下加载配置文件
        ApplicationContext ctx = new FileSystemXmlApplicationContext("D:\\workspace\\spring\\spring_10_container\\src\\main\\resources\\applicationContext.xml");

加载Bean
在这里插入图片描述
容器的类结构层次图
在这里插入图片描述

大总结:
1.容器相关
BeanFactory是IoC容器的顶层接口,ApplicationContext接口是Spring容器的核心接口。
ApplicationContext接口常用的初始化类(ClassPathXmlApplicationContext和FileSystemXMLApplicationContext)
2.Bean相关
在这里插入图片描述
3.依赖注入
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值