IoC(Inversion of Control)的主要组件和注入方式

Wesley13
• 阅读 598

一.IoC的主要组件:

(1).Spring框架的两个最基本和最重要的包是org.springframework.beans.factory(该包中的主要接口是BeanFactory)和org.springframework.context包(该包中的主要接口是ApplicationFactory)。这两个包中的代码提供了Spring IoC特性的基础。

(2).Spring IoC框架的主要组件有:Beans、配置文件(beans.xml或applicationContext.xml)、BeanFactory接口及其相关类、ApplicationContext接口及其相关类。

(3).下面分别介绍IoC主要组件技术:

Beans:Beans是指项目中提供业务功能的Bean,即容器要管理的Bean。Beans就是一个常见的JavaBean,Java类。

配置文件(beans.xml或applicationContext.xml):是用来装配Beans的。

— 在Spring中对Bean的管理是在配置文件中进行的。在Spring容器内编辑配置文件管理Bean又称为Bean的装配;实际上装配就是告诉容器需要哪些Bean,以及容器是如何使用IoC将它们配合起来。

— Bean的配置文件是一个XML文件,它可命名为beans.xml、applicationContext.xml或其它。一般习惯使用applicationContext.xml。

— 配置文件包含Bean的id、类、属性及其值;包含一个元素和数个子元素。Spring IoC框架可根据Bean的id从Bean配置文件中取得该Bean的类,并生成该类的一个对象,继而从配置文件中获得该对象的属性和值。常见applicationContext.xml配置文件格式如下:

[html]  view plain  copy

  1. "http://www.springframework.org/dtd/spring-beans-2.0.dtd"
  2. [<!ENTITY contextInclude SYSTEM
  3. "org/springframework/web/context/WEB-INF/contextInclude.xml">]>
  4. <beans>
  5. <bean id= "chinese" class="iocexample2.Chinese">
  6. <bean id="英语" class="iocexample2.English"></bean>
  7. </beans>

BeanFactory接口及其相关类:

— BeanFactory采用了工厂设计模式,即Bean容器模式,负责读取Bean的配置文件,管理对象的生成、加载,维护Bean对象与Bean对象之间的依赖关系,负责Bean的生命周期,对于简单的应用程序来说,使用BeanFactory就已经足够管理Bean,在对象的管理上就可以获得许多便利性。

— org.springframework.beans.factory.BeanFactory是一个顶级接口,它包含管理Bean的各种方法。Spring3框架也提供一些实现了该接口的类。

— org.springframework.beans.factory.xml.XmlBeanFactory是BeanFactory常用的实现类。其根据配置文件中的定义装载Bean。要创建XmlBeanFactory,需要传递一个FileInputStream对象,该对象把XML文件提供给工厂。

— 代码可以写成:

[java]  view plain  copy

  1. BeanFactory factory=new XmlBeanFactory( new FileInputStream("applicationContext.xml "));

— BeanFactory的常用方法如下:

getBean(String name):该方法可根据Bean的id生成该Bean的对象。

getBean(String name,Class requiredType):该方法可根据Bean的id和相应类生成该Bean的对象。

ApplicationContext接口及其相关类:

— 作为一个应用程序框架,只提供Bean容器管理的功能是不够的。若要利用Spring3所提供的一些高级容器功能,则可以使用ApplicationContext接口,该接口是提供高级功能的容器。

— ApplicationContext的基本功能与BeanFactory很相似,但它还有以下功能:

提供访问资源文件的更方便的方法。

支持国际化消息。

提供文字消息解析的方法。

可以发布事件,对事件感兴趣的Bean可以接收到这些事件。

— ApplicationContext接口的常用实现类有3个:
FileSystemXmlApplicationContext:从文件系统中的XML文件加载上下文中定义的信息。

ClassPathXmlApplicationContext:从类路径中的XML文件加载上下文中定义的信息,把上下文定义的文件当成类路径资源。

XmlWebApplicationContext:从Web系统中的XML文件加载上下文中定义的信息。

— 其中FileSystemXmlApplicationContext和ClassPathXmlApplicationContext的代码编写如下:

[java]  view plain  copy

  1. ApplicationContext context=new FileSystemXmlApplicationContext("d:/applicationContext.xml ");

[java]  view plain  copy

  1. ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml ");

第一种使用文件系统的方式来查询配置文件,此时applicationContext.xml文件位于D盘下,第二种使用类路径来查询配置文件,此时applicationContext.xml文件位于项目的src目录底下。

— FileSystemXmlApplicationContext和ClassPathXmlApplicationContext的区别是:FileSystemXmlApplicationContext只能在指定的路径中查询applicationContext.xml配置文件,而ClassPathXmlApplicationContext可以在整个类路径中查询applicationContext.xml。

二.接下来来介绍一下注入的两种方式:

(1).在介绍之前,来了解一下注入的概念:IoC(控制反转)即依赖注入,就是指程序在运行过程中,如果需要另外一个对象协助完成时,无需在代码中创建被调用者,而是依赖外部的注入获取。Spring的依赖注入对调用者几乎没有任何要求,完全支持对象之间的依赖关系的管理。

(2).依赖注入通常有两种方式:设置注入和构造注入。

— 设置注入:设置注入是通过setter方法注入被调用者的实例。该方式简单、直观,而且容易理解,所以Spring的设置注入被大量使用。

— 构造注入:利用构造方法来设置依赖注入的方式称为构造注入。

三.以上内容仅供大家学习参考,写得不好,请见谅,如有错误,请指出,上面中没有附上一些例子,大家先理解一下吧!谢谢!

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Spring 的 IOC 容器
一.BeanFactory 1\.在spring中,最基本的IOC容器接口是BeanFactory这个接口为具体的IOC容器的实现做了最基本的功能规定。  2\.在BeanFactory只对IOC容器的基本行为做了定义,根本不关心你的bean是怎样定义怎样加载的;XmlBeanFactory就是针对最
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Stella981 Stella981
2年前
Spring IOC 相关的面试题
Spring最基础的部分就是IOC,对IOC的理解程度从某个方面代表着你对Spring 的理解程度,看了网上的一些面试题,针对SpringIOC相关的重点是下面几个:1、Spring中Bean的生命周期是怎么样的?2、SpringIOC是如何实现的,如何加载Bean,如何创建单例Bean?3、BeanFactory和Application
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这