Spring框架系列----IOC基础(跟我学Spring系列了解)

IOC: Inversion Of Control  ;控制反转,容器帮忙创建及注入依赖对象

 传统情况: 程序主动创建相关对象然后组合起来 

通俗点说:以前用户类都是new出来的,经常实例化

反转: 容器帮忙创建以及注入依赖对象

;

只用new一次即可

       传统程序,都是在类内部主动创建依赖对象,而IOC则把创建和查找依赖对象的控制权都交给了容器,由容器进行注入组合对象,所以对象与对象之间松散耦合.

      IOC负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖,应用程序不用new相关的对象,应用程序由IOC容器进行组装,Spring的BeanFactory就是IOC容器的实际代表者

 Spring IOC 容器如何知道哪些是它管理的对象?

       配置文件: Spring IOC 通过读取配置文件中的配置元数据,通过元数据对应用中的各个对象进行实例化及装配,一般都是xml形式的的配置文件

 

Bean的概念

      由IOC容器管理的那些组成应用程序的对象就叫Bean,Bean是Spring容器初始化,装配及管理的对象,除此之外,bean就与应用程序的其他对象没有区别了

  IOC源码解析

    org.springframework.beans包中的BeanFactory接口,BeanFactory接口提供了IOC最基本功能,org.springframework.context接口扩展了BeanFactory,ApplicationContext继承BeanFactory,因而BeanFactory所有语义也适用于ApplicationContext

 

xmlBeanFactory:BeanFactory实现,目的是获取配置文件,实现不同的bean

   1.File file=new File("fileSystemConfig.xml")

     Resource resource=new FileSystemResource(file);

     BeanFactory bean Factory=new XmlBeanFactory(resource);

   2.Resource resource=new ClassPathResource("classpath.xml");

     BeanFactory beanFactory=new XmlBeanFactory(resource);

ApplicationContext实现:

    ClassPathXmlApplicationContext:从classpath处获取

       BeanFactory beanFactory=new ClassPathXmlApplicationContext("classPath.xml");

    FilSystemXmlApplicationContext: 从文件系统里获取

      BeanFactory beanFactory= new FileSystemXmlApplicationContext("fileSystem.xml");

ApplicationContext获取bean的方法:

  a. Object getBean(String name) 根据名称返回一个Bean

  b.T getBean(String name,Class<T> requiredType)根据名称和指定的类型返回一个bean,客户端无需自己进行类型转换,如果类型转换失败,容器抛出异常

  c. T getBean(Class<T> requiredType)根据指定类型返回一个Bean,客户端无需自己进行转换,如果没有或有多个Bean存在将抛出异常

  d.Map<String,T>getBeansOfType(class<T>type)根据指定的类型返回一个键值为名字和值为Bean对象的Map,如果没有Bean对象存在则返回空的map

IOC容器工作原理:

  1.准备配置文件:在配置文件中声明Bean定义,即为Bean配置元数据

  2.由IOC容器进行解析元数据:IOC容器的Bean reader 读取并解析配置文件,根据定义生成BeanDefinition配置元数据对象,IOC容器根据BeanDefinition进行实例化,配置以及组装Bean.

  3.实例化IOC容器:由客户端实例化容器,获取需要的Bean.

Bean的配置与命名

Spring IOC容器目的就是管理Bean ,Bean的定义根据配置文件中Bean的定义创建,而Bean定义在容器内部由BeanDefinition对象表示:

   1.全限定类名:用于定义Bean的实现类

   2.Bean行为定义:定义了Bean在容器中的行为:作用域,是否惰性初始化及生命周期

   3.Bean创建方式定义;通过构造器还是工厂方法创建Bean

   4.Bean之间关系定义:即对其他bean的引用,即依赖关系定义,也就是依赖注入

Bean的命名:

      每个Bean可以有一个或者多个id,第一个id为标识符,其余称为别名,容器内这些id必须是唯一的

实例化Bean

       1使用构造器实例化Bean

         a.使用空构造器进行定义,使用此方式,class属性指定的类必须有空构造器

             <bean name="bean1" class="cos.con.spring.bean.create"/ >

         b.使用有参数的构造器定义

             <bean name="bean1" class="cos.con.spring.bean.create" >

             <!--指定构造器参数   index为位置,value为常量值或者引用---->

               <constructor-arg index="0" value="Hello Spring!">

              <bean/>

2.使用静态工厂方式实例化Bean,除了指定的class属性,还要指定factory-method属性指定实例化bean的方法

3.使用实例化工厂方法实例化Bean

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值