Bean的属性注入——为不同类型属性注值
来源:互联网 发布:sql语言怎么查询数据 编辑:程序博客网 时间:2024/06/03 10:36
注:为所有属性提供set方法,均采用set方式注入
下面定义一个Person类来演示Bean的属性注入:
public class Person { private String name; private int age; private Car car; //不列出set和get方法 @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", car=" + car + "]"; }}
在XML中声明一个bean:
<!-- 尚未为属性注值 --><bean id="person" class="com.Person"></bean>
(一)注入字面值
基本数据类型及其封装类、String等类型都可以采取字面值注入的方式
1、通过value属性注入
<bean id="person" class="com.Person"> <property name="name" value="Jack"></property> <property name="age" value="30"></property> </bean>
一旦Person被实例化,Spring就会调用元素所指定属性的setter方法为该属性注入值。
在这里,value=”30”,会尝试把字符串”30”解析成int类型。
如果value=”xxx”,会尝试把字符串”xxx”解析成我们需要的类型(如果解析不成功,会抛异常)。
2、通过<value>
子标签注入
property标签不仅提供了value属性,还提供了value子标签。
<bean id="person" class="com.Person"> <property name="name"> <value>Jack</value> </property> <property name="age"> <value>20</value> </property> </bean>
子标签有点多此一举的感觉,用value属性就可以了,而且value属性更直观更方便。的确如此,但是在特殊情况下(例如:要注入的值里面包含XML特殊字符),不得不使用<value>
子标签。
若字面值中包含特殊字符,可以使用 <![CDATA[]]>
把字面值包裹起来
我们想为person的name属性注入值“<Jack>
”,必须这么做:
<bean id="person" class="com.Person"> <property name="name"> <value><![CDATA[<Jack>]]></value> </property> <property name="age" value="20"></property> </bean>
(二)外部bean
类Car的源码如下:
public class Car { private String brand; private String model; private String color; //不列出set和get方法 @Override public String toString() { return "Car [brand=" + brand + ", model=" + model + ", color=" + color + "]"; }}
我们首先在XML中声明一个Car类型的,代码如下:
<bean id="car1" class="com.Car"> <property name="brand" value="奥迪"></property> <property name="model" value="A6"></property> <property name="color" value="黑色"></property> </bean>
在person bean中通过ref属性引用这个外部的bean,代码如下:
<bean id="person" class="com.Person"> <property name="name" value="jack"></property> <property name="age" value="20"></property> <property name="car" ref="car1"></property> </bean>
property标签不仅提供了ref属性,还提供了ref子标签。引用外部bean,不仅可以通过ref属性,还可以通过ref子标签。
<bean id="person1" class="com.Person" > <property name="name" value="jack"></property> <property name="age" value="20"></property> <property name="car"> <ref bean="car1"/> </property> </bean>
(三)内部bean
<bean id="person" class="com.Person"> <property name="name" value="jack"></property> <property name="age" value="20"></property> <property name="car"> <bean class="com.Car"> <property name="brand" value="奥迪"></property> <property name="model" value="A6"></property> <property name="color" value="黑色"></property> </bean> </property> </bean>
①内部bean的id属性是多余的,没有必要给定id属性。
②外部根本无法引用内部bean
③内部Bean的最大缺点:它们不能被复用。内部Bean仅适用于一次注入,不能被其它Bean所引用。
④property标签和constructor-arg标签,都有子标签bean。因此在property标签和constructor-arg标签内部都可以声明内部bean。
(四)null值
property标签和constructor-arg标签,都有子标签null。用于为属性赋null(用的不太多,毕竟引用类型的属性的初始值就是null)。
<bean id="person1" class="com.Person"> <property name="car"> <null></null> </property> </bean>
有关集合属性的值注入问题,将在接下来的章节讲解
- Bean的属性注入——为不同类型属性注值
- spring为不同类型的属性注值
- bean属性的注入
- Bean的属性注入
- Spring框架中对bean类不同类型属性的注入方式
- 学习笔记——Spring 中Bean属性的注入
- Spring的bean管理——注解注入属性
- Spring中Bean属性为集合的注入方式
- Spring属性注入Bean的List属性
- 《step3:tiny-Spring-IoC学习三》——为bean注入属性
- [Spring] 注入Bean属性
- bean属性注入
- 【Struts2】为Action的属性注入值
- 为Action的属性注入值
- struts2为Action的属性注入值
- 五、Spring容器中Bean的属性值的注入
- Spring 之 Bean的属性注入
- bean的加载(十)属性注入
- 杭电3065(HDU3065)
- 40和的组合第二弹
- RecyclerView的安装包和source
- 函数
- POJ 1321 棋盘问题
- Bean的属性注入——为不同类型属性注值
- BZOJ 1797: [Ahoi2009]Mincut 最小割 图的联通 最小割 tarjan
- springboot + mybatis 多数据源最简解决方案
- 思维导图:一张图了解jQuery
- 个人理解tensor或多维数组的最佳方式
- Ubuntu 16.04配置Shadowsocks和Privoxy实现浏览器和终端代理
- 性能测试笔记--自己总结
- removeNthFromEnd
- 关于ajax 拦截器的问题