控制反转容器

一、BeanFactory和ApplicationContext接口的选择

ApplicationContext是BeanFactory的扩展,具备BeanFactory的所有能力和行为,并进行了扩展。

二、容器和Bean的基本原理

Spring中的Bean就是由Spring容器初始化、装载的Bean,Bean的定义和之间的相互依赖关系通过配置文件定义。

1.容器

BeanFactory接口就是Spring的IoC容器,负责管理Bean,职责包括:实例化,定位,配置这些Bean和管理他们之间的相互关系。Spring提供了很多该接口的实现,就是多种的管理Bean的方式,例如XMLBeanFactory,就是通过XML配置文件管理Bean。

(1)配置元数据

Spring通过读取元数据,实例化,配置,组装Bean,Spring提供三种方式配置元数据:XML格式,Java属性文件,Spring公共API实现。IoC容器可以通过多种途径加载元数据,例如Java文件系统,ClassPath等。

(2)实例化容器

Resource resource=new FileSystemResource("beans.xml");

BeanFactory factory=new XmlBeanFactory(resource);

ClassPathResource resource=new ClassPathResource("beans.xml");

BeanFactory factory=new XmlBeanFactory(resource);

ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml","applicationContext-part2.xml"});

BeanFactory factory=(BeanFactory)context;

(3)将配置文件拆分成多个

象上面的代码一样通过String数组加载多个配置文件,也可用import元素指定包含多个XML文件,放在<bean>元素之前用。

2.Bean的属性

(1)Bean命名

每个Bean有一个或多个id,id必须唯一,如果有多个id,其他的id被认为是别名,id和name构成标识符。

(2)Bean的别名

<alias>元素

3.实例化Bean

Spring容器通过反射机制实例化Bean,Spring不仅可以管理标准JavaBean,还可以管理任意类。

(1)用构造器来实例化

需要一个默认构造器

(2)用静态工厂方法实例化

需要指定factory-method属性指定静态工厂方法。

(3)使用实例工厂方法实例化

class属性为空,factory-bean属性指定工厂bean,factory-method属性指定该工厂的静态工厂方法。

4.使用容器

InputStream is=new InputStream("beans.xml");

BeanFactory factory=new XmlBeanFactory(is);

5.依赖

(1)注入依赖

setter注入:通过调用默认构造器或静态工厂方法实例化Bean后,通过调用setter方法注入对象。

构造器注入:通过构造器注入对象。

提倡使用setter注入,Spring容器创建时会验证Bean的配置,在Bean被创建之前,其属性不会被设置,对于Singleton Bean会在Spring容器创建时被实例化。

循环依赖,不能通过构造器注入依赖,可以用setter方法,Spring容器会在创建时检测循环依赖。被注入的Bean必须在注入前实例化完毕。

 6.构造器参数解析

对于类型明确的构造器参数定义非常简单。特殊的一些可采用下列办法

(1)对于简单类型参数

可通过type属性指定参数类型。

(2)构造器参数的索引

可通过index属性指定是第几个参数,从0开始

7.Bean属性及构造器参数详解

(1)直接量(基本类型、String类型等)

<value>元素和<idref>元素,<idref>等同于<value>,但会多出对Bean的验证。如果被应用Bean在同意XML文件中,且Bean的名字就是Bean id,那么可以使用local属性

(2)引用其他Bean

三种形式:

<ref bean=""/>引用任何Bean

<ref local=""/>引用同一文件中的Bean

<ref parent="">引用父容器中的Bean

8.内部Bean

不需要有id和name属性

9.集合

通过<list/>、<set/>、<map/>及<props/>元素可以定义和设置与Java Collection类型对应的List、Set、Map及Properties的值。

(1)集合合并

(2)强类型集合(仅能在J2SE5.0以上版本使用)

10.Nulls

<null/>元素

11.简写形式

12.组合属性名称

13.方法注入

(1)Lookup方法注入

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值