Spring核心之一——Ioc/DI(一)

   Spring概述与架构
   Spring核心之一——Ioc/DI(一)

1 Spring下载

  spring-framework-4.1.2下载地址:
  http://download.csdn.net/download/winston_d/10046400
  spring-framework-3.2.0.RELEASE-dependencies(依赖包)下载地址:
  http://download.csdn.net/download/winston_d/10046413

  spring-4.1.2目录结构
  

2 Spring核心

  Spring核心包括控制反转(IoC)、依赖注入(DI)和AOP。其中控制反转(IoC)和依赖注入(DI)是同一概念。

3 IoC/DI

  IoC(Inversion of Control):控制反转,是一种设计思想。在开发中,IoC意味着将设计好的对象交给容器来创建和注入。
  传统的Java程序设计中,我们直接在对象内部通过new进行创建对象,这是程序主动去创建依赖对象;而IoC是有专门的容器来控制对象的创建。所谓反转是依赖对象的获取被反转了,容器来帮助我们创建和注入依赖对象,而对象只是被动的接受依赖对象。相对的程序中对象主动控制获取依赖对象叫作正转。
  DI(Dependency Injection):依赖注入,容器的管理对象对于外部资源(对象、资源、常量数据等)的依赖由IoC容器来管理和注入。
  组件之间依赖关系由容器在运行期决定,即容器会动态的将某个依赖关系注入到组件中。依赖注入的目的不是为应用程序带来更多功能,而是为了提升组件的重用性,通过简单的配置就可以搭建一个灵活的、可扩展的应用。
  IoC和DI是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象,很难想到谁来维护对象关系),所以04年Martin Fowler又给出了一个新的名字“依赖注入”,明确描述了被注入对象依赖IoC容器配置依赖对象。
  IoC容器

4 BeanFactory

  IoC容器负责实例化、配置应用程序中的对象及建立这些对象间的依赖关系。IoC容器通过读取配置文件中的数据来对各个对象进行实例化和装配。一般基于xml配置文件配置,也可以通过注解的方式进行配置。
  Ioc容器的代表是spring-beans包中的BeanFactory接口。BeanFactory接口提供了IoC容器最基本功能,而spring-context包中的ApplicationContext接口继承了BeanFactory接口,还扩提供了与Spring AOP集成、国际化处理(I18N)、文本信息解析工具、事件传播等功能。

4.1 BeanFactory接口源码
public interface BeanFactory {
   
    String FACTORY_BEAN_PREFIX = "&";
    // 根据name获取Bean
    Object getBean(String name) throws BeansException;
    // 根据name和Class获取Bean
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;
    // 根据Class获取Bean
    <T> T getBean(Class<T> requiredType) throws BeansException;
    // 根据name和其它信息获取Bean
    Object getBean(String name, Object... args) throws BeansException;
    // 根据Class和其它信息获取Bean
    <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
    // 判断容器是否包含某个Bean
    boolean containsBean(String name);
    // 判断Bean是否是单例
    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
    // 判断Bean是否是多例
    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
    // 判断某个Bean是否是某个Class类型
    boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值