Spring的属性注入到bean实例的细节

  前边我们讲过了Spring框架的配置文件中如何配置一个普通Java类的bean从而利用反射创建一个这个类的实例和如何使用IOC容器的实例ApplicaitonContext的ClasspathXmlApplicaitonContext和FileSystemApplicaitonContext来使用配置的bean。下边我们讲一讲如何对在配置文件创建的bean的实例进行属性注入的细节。

  我们知道,属性注入是为Java类创建的对象的定义的属性进行赋值,某个类中的属性可以基本数据类型(其对应的封装数据类型)、String类型、数组、集合(包含Map和Properties)和其他应用数据类型。对不同的类型,在配置文件中使用不同的配置方式为其进行赋值。

  1.字面值

  字面值是指可以用字符串表示的值,可以用字符串为基础数据类型及其封装类、字符串类型的类属性进行赋值(字面值)。具体使用property标签的value=""属性来为其赋值。

  需要注意的是:当字面值中出现特殊符号时(如配置文件中使用的<>间括号)时,我们无法再单纯的使用字符串表示会出现编译错误,这时就需要使用<![CDATA][带特殊符号的字面值]>将字面值包含进去就可以了

  2. 属性值直接引用其他的bean

  在组成应用程序的bean中常常需要相互协作以完成应用程序的功能,通过ref标签或属性ref使bean之间可以相互引用

  或者我们可以直接在property标签中定义一个内部bean来使用,内部bean定义在某个bean的内部,外部的bean是无法使用的,所以内部bean的id属性写不写都可以。

  有时我们可以直接将某个实例的属性指向已经存在于配置文件中的bean实例,具体使用<property name="" ref="beanID">即property的ref属性或者使用property的子标签ref。

  3.注入属性null值和级联属性

  ① 为属性注入null值

  使用专有 的<property name=""><null/></property>null标签来为某个属性注入一个null值

  ② Spring属性注入时支持级联操作

  像Hibernate和Struts2(OGNL)一样,Spring也支持级联操作。<property name="car" value="car.name"></property>

  需要注意的是,对于级联操作,Struts2和Spring框架也存在一些区别。Struts2在使用OGNL时用到的级联操作可以直接为属性对象的属性进行赋值,因为Strust2框架自动的帮助我们创建了一个属性对象;而在Spring中为属性对象赋值时,必须保证在配置文件中存在一个属性对象的bean,否则若是直接给属性对象的属性赋值会报异常,Spring不会自动的为我们创建一个属性对象

  4. 注入属性的集合属性

  Spring可以在xml配置文件中使用一组内置的标签为集合属性进行注入赋值:<list><set><map>,其中数组也要用<list>进行属性注入赋值。

  使用<list>为属性注入值时,可用<value>指定字面值,<ref>指向其他的bean的应用等等。

  <map> 可用<entry>标签的key value属性来为map进行赋值。

  properties类型用<props>和其子标签<prop>来为其进行赋值。

  需要注意的是,单独将集合(含list/set/map/propertis)标签定义在一个Bean中显然不利于我们重复使用这些结合属性,当我们在配置文件中有多个bean需要注入同样的集合属性时,我们可以将集合属性定义在全局中,相当于单独创建了一个集合类型的"bean"

  5.使用p命名空间

  我们在为bean进行属性注入时,需要单独使用property标签或者constructor-args标签,比较繁琐,其实我们还可以用一种更简单的方式来为bean实例进行属性的注入。

  即使用P的命名空间。我们必须在当前工程当中导入命名空间。

  具体使用:<bean id="" class="" p:propertyName="propertyValue"  ></bean>






















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值