




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于SSM框架的软件架构设计实战Software
Architecture
Design
Practice
Based
on
SSM
Framework第5章Spring的IoC机制1234IoC的概念基于XML的配置基于注解的配置基于Java类的配置IoC的概念IoC的概念所谓控制反转是指将某一接口(或类)的具体实现类(或子类)的选择权从调用者手中移除,转交给第三方,使得程序中所有对象的创建过程都由第三方统一管理,当代码中需要使用某一类的对象时,只需要从第三方直接获取即可。IoC并不是一种特定的技术,而是一种设计思想,其主要目的就是接管系统中各个对象的创建过程,使产生依赖关系的两个对象之间摆脱依赖关系,达到模块间解耦的目的。IoC的概念控制反转和工厂模式IoC是一种程序设计思想,而不是一种特定的技术,工厂模式是一种设计模式,是在长期的软件设计工作中总结出来的用于解决软件设计问题的模式,它是针对对象创建问题提出的一种具体解决方案。通过工厂模式,可以实现IoC这种思想,因此可以说,工厂模式是实现控制反转的一种方式。IoC的概念控制反转和依赖注入应用IoC思想后,对象的创建过程虽然不需要调用者进行管理,但对象的各个成员的初始化还是需要调用者负责,而依赖注入(DependencyInjection,DI)指的就是将对象的内各个成员的初始化和赋值工作也交给第三方,不需要开发人员手动管理。因此,可以说控制反转和依赖注入所表达的是同一种软件设计思想。IoC的概念Spring中的控制反转在Spring中,将程序中要使用的各个对象称为Bean,而对象(也就是Bean)的管理者称为容器(Container),SpringIoC包括以下组成部分:1.资源描述组件2.资源加载组件3.Bean描述组件4.Bean构造组件5.容器组件6.Bean注册组件应用程序XML注解Java类Bean配置信息Spring容器Bean实现类Class1Class2……Bean定义注册表Bean缓存池1.读取Bean配置信息2.根据Bean注册表实例化Bean3.将Bean实例放到缓存池中4.使用BeanIoC的概念Spring中的控制反转SpringIoC容器首先读取Bean的配置信息,这些配置信息可能来自于XML配置文件、代码注解或Java类,而后根据Bean的配置信息对Bean进行装配,并将装配好的Bean存入容器的Bean缓存池中,应用程序使用Bean时,只需从容器中获取即可。在Spring的当前版本中,支持三种配置方式,分别为:基于XML的配置基于注解的配置基于Java类的配置基于XML的配置基于XML的配置——Bean的实例化实例化Bean的三种方法默认构造函数静态工厂实例工厂方法1:使用默认构造函数前提:Bean的实现类必须有默认构造函数基于XML的配置——Bean的实例化配置文件:基于XML的配置——Bean的实例化测试代码:方法2:使用静态工厂前提:工厂类中要有静态生产方法基于XML的配置——Bean的实例化工厂类:基于XML的配置——Bean的实例化配置文件:方法3:使用实例工厂前提:工厂类中要有非静态生产方法基于XML的配置——Bean的实例化工厂类:基于XML的配置——Bean的实例化配置文件:基于XML的配置——Bean的生命周期与Bean的生命周期有关的配置设置Bean的作用范围(scope属性)延迟初始化(lazy-init和default-lazy-init属性)初始化方法和销毁方法(init-method和destroy-method属性)设置Bean的作用范围(scope属性)基于XML的配置——Bean的生命周期配置文件:基于XML的配置——Bean的生命周期scope属性的可选值singleton(默认):在容器初始化时创建Bean,每次取到的是同一实例prototype:在每次获取时创建Bean,每次取到的是新的实例request:每次HTTP连接创建一个新的Bean实例session:同一个Session共享一个Bean实例application:同一个Application共享一个Bean实例websocket:每次websocket连接创建一个新的Bean实例延迟初始化(lazy-init和default-lazy-init属性)作用:在Bean的作用范围为singleton时,第一次获取Bean时创建实例只有当scope属性为singleton时这两个属性才有效基于XML的配置——Bean的生命周期配置文件:或:Bean的初始化和销毁方法(init-method和destroy-method属性)作用:配置在Bean创建完成和销毁之前需要调用的方法注意:要想让销毁方法被调用,需要关闭容器基于XML的配置——Bean的生命周期配置文件:基于XML的配置——基于setter的属性注入原理:基于Java的反射机制,间接调用Bean的实现类的set方法,实现属性注入前提:需要注入的成员要定义setter基于XML的配置——基于setter的属性注入字面值的setter注入字面值:基本数据类型+String方法:使用<property>和<value>标签或<property>标签的value属性基于XML的配置——基于setter的属性注入配置文件:基于XML的配置——基于setter的属性注入也可以使用<bean>标签的value属性:基于XML的配置——基于setter的属性注入字面值setter注入注意事项:使用<value></value>标签,或使用<property>标签的value属性注意数据类型对象类型的setter注入方法1:引用其它Bean使用<ref>标签或<property>标签的ref属性基于XML的配置——基于setter的属性注入基于XML的配置——基于setter的属性注入配置文件:或:对象类型的setter注入方法2:内部Bean在<property>标签内部使用<bean>标签定义内部Bean基于XML的配置——基于setter的属性注入配置文件:对象类型的setter注入方式3:级联属性基于XML的配置——基于setter的属性注入配置文件:基于XML的配置——基于setter的属性注入对象类型setter注入注意事项三种方式:引用其它Bean,定义内部Bean、使用级联属性null值:使用<null/>标签集合类型的属性注入:List类型使用<list>标签基于XML的配置——基于setter的属性注入配置文件:集合类型的属性注入:Set类型使用<set>标签基于XML的配置——基于setter的属性注入配置文件:集合类型的属性注入:Map类型使用<map>标签基于XML的配置——基于setter的属性注入配置文件:基于XML的配置——基于setter的属性注入集合类型的属性注入:Map类型说明<entry>标签:代表一个元素<key>标签:代表键值是字面值,使用<value>标签,是对象类型,使用<ref>标签也可以使用<entry>的key属性和value属性(或key-ref属性和value-ref属性)基于XML的配置——基于构造函数的属性注入原理:基于Java的反射机制,间接调用Bean的实现类的带参数构造函数,实现对其各属性的赋值。前提:重载带参数构造函数主要问题:参数的对应方法:使用<constructor-arg>标签按顺序匹配参数(默认方式)基于XML的配置——基于构造函数的属性注入按索引匹配参数:使用<constructor-arg>的index属性基于XML的配置——基于构造函数的属性注入按类型匹配参数:使用<constructor-arg>的type属性基于XML的配置——基于构造函数的属性注入按名称匹配参数:使用<constructor-arg>的name属性基于XML的配置——基于构造函数的属性注入多种方式混合匹配参数基于XML的配置——基于构造函数的属性注入基于XML的配置——基于构造函数的属性注入注意事项构造函数入参引用的对象必须准备就绪把<value>替换成<ref>就是对象类型的注入<value>标签也可以替换成<constructor-arg>的value属性<ref>标签也可以替换成<constructor-arg>的ref属性也可以在<constructor-arg>中定义内部Bean把<value>替换成集合,就是集合类型的注入基于XML的配置——工厂方法注入原理在工厂方法中设置对象的属性值,通过工厂方法实例化Bean以后,即完成了属性的注入分类静态工厂实例工厂基于XML的配置——工厂方法注入工厂类:基于XML的配置——工厂方法注入配置文件:基于XML的配置——p命名空间、c命名空间和util命名空间原理使用p命名空间注入时,将需要注入的属性名作为<bean>标签的一个属性,从而免于配置多个<property>子标签,起到简化配置的作用。在使用前,需要在配置文件里声明p命名空间p命名空间注入:字面值基于XML的配置——p命名空间、c命名空间和util命名空间p命名空间注入:对象类型util命名空间:允许我们定义一个集合,然后像引用Bean一样引用这个集合在使用前,需要先声明util命名空间基于XML的配置——p命名空间、c命名空间和util命名空间p命名空间注入:集合类型(结合util命名空间)基于XML的配置——p命名空间、c命名空间和util命名空间c命名空间:与基于p命名空间的注入类似,将需要注入的属性名作为<bean>标签的一个属性,起到简化配置的作用。在使用前,需要先声明c命名空间基于XML的配置——p命名空间、c命名空间和util命名空间c命名空间注入:字面值、对象类型和集合类型(结合util命名空间)基于XML的配置——p命名空间、c命名空间和util命名空间基于XML的配置——Bean之间的关系继承涉及属性:abstract、parent依赖涉及属性:depends-on基于XML的配置——Bean之间的关系继承如果多个Bean存在相同的配置信息,Spring允许我们定义一个父Bean,子Bean将自动继承父Bean的配置信息。父Bean使用abstract=true属性,它是抽象的,不能被实例化。子Bean使用parent属性,指明其父Bean是谁。配置文件基于XML的配置——Bean之间的关系基于XML的配置——Bean之间的关系依赖使用<ref>标签和ref属性定义的依赖Spring可以自动处理,保证被依赖的Bean先被实例化。有的时候Bean之间不存在引用关系,但需要指明它们创建的先后顺序,这就需要显式地配置Bean之间的依赖关系。配置Bean之间的依赖关系使用<bean>标签的属性depends-on。配置文件基于XML的配置——Bean之间的关系基于注解的配置基于注解的配置原理扫描源代码,遇到注解调用相应的注解处理程序完成注入优势简化配置局限具有侵入性使用前提声明context命名空间,在配置文件中配置包扫描基于注解的配置声明命名空间配置包扫描基于注解的配置三类注解用于Bean的自动注册的注解用于Bean的生命周期的注解用于属性注入的注解基于注解的配置用于Bean的自动注册的注解(用于类)@Component:通用@Repository:标注数据访问层的Bean@Service:标注业务逻辑层的Bean@Controller:标注控制器层的Bean基于注解的配置使用案例基于注解的配置用于Bean的生命周期的注解@Scope(“singleton”):用于类,标注Bean的作用范围@Lazy(true/false):用于类,标注延迟初始化@PostConstruct:用于方法,标注Bean的初始化方法@PreDestroy:用于方法,标注Bean的销毁方法基于注解的配置使用案例基于注解的配置用于属性注入的注解@Value:注入字面值@Autowired:默认按类型匹配@Qualifier:与@Autowired配合,指定Bean的名称@Resource:通过名称或类型匹配基于注解的配置@Value用于类的成员、setter或是构造函数参数上,可以用于注入字面值基于注解的配置用于类成员用于setter基于注解的配置用于构造函数参数基于注解的配置@Autowired用于类成员,也可以用于setter,还可以用于构造函数,用于注入对象类型成员默认按照类型匹配要注入的Bean基于注解的配置用于类成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校方责任赔付协议书
- 土地信息咨询协议书
- 入室抢劫调解协议书
- 居室房屋出售协议书
- 暖气安装人工协议书
- 离婚之后变更协议书
- 闲置公司收购协议书
- 政府石料处置协议书
- 摊点卫生管理协议书
- 快速处理保险协议书
- 2025-2030全球及中国军事无线电系统行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 配电工程施工方案
- 2025年中国光纤放大器行业竞争格局及市场发展潜力预测报告
- 护理礼仪中的称呼礼仪
- 2024年河北省普通高中学业水平选择性考试物理试题含答案
- Unit 4 Healthy food(说课稿)-2024-2025学年人教PEP版(2024)英语三年级下册
- 2025年全国叉车证理论考试题库(含答案)
- 99S203 消防水泵接合器安装图集
- 恐惧-回避理论模型
- DB13T 5461-2021 连翘种子种苗质量标准
- Q∕SY 04797-2020 燃油加油机应用规范
评论
0/150
提交评论