1.字面值
基本数据类型及其封装类,String类等类型都可以采取字面值注入的方式。若字面值包含特殊字符,可以使用<![CDATA[]]>把字面量包裹起来。
1 <bean id="car1" class="com.wzy.beans.Car"> 2 <constructor-arg value="Audi" index="0" type="java.lang.String"/> 3 <constructor-arg index="1" type="java.lang.String"> 4 <!--特殊字符需要用![CDATA[]]进行包裹--> 5 <!--属性值可以使用value子节点进行配置--> 6 <value><![CDATA[<<ShangHai]]></value> 7 </constructor-arg> 8 <constructor-arg value="200" index="2" type="int"/> 9 </bean>
Java代码:
1 private static void testHelloWorld3() { 2 //1.创建Spring的IOC容器对象 3 ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml"); 4 5 //2.从IOC容器中获取Bean实例 6 Car car = (Car) ctx.getBean("car"); 7 System.out.println(car); 8 car = (Car) ctx.getBean("car1"); 9 System.out.println(car); 10 }
输出结果:
HelloWorlds Constructor...
setName : Spring
Car{brand='Audi', corp='ShangHai', price=3000000.0, maxSpeed=0}
Car{brand='Audi', corp='<<ShangHai', price=0.0, maxSpeed=200}
2.引用其他的Bean
在bean的配置文件中,可以通过<ref>元素或ref属性为bean的属性或构造器参数指定对bean的引用。也可以在属性或构造器里包含bean的声明,这样的Bean称为内部Bean.
spring.xml代码
1 <bean id="person" class="com.wzy.beans.Person"> 2 <property name="name" value="wzy"/> 3 <property name="age" value="26"/> 4 <!--可以使用property的ref属性建立bean之间的引用关系,或者使用property子标签ref也是可以的--> 5 <!--<property name="car" ref="car"/>--> 6 <property name="car"> 7 <!--内部bean--> 8 <bean class="com.wzy.beans.Car" id="car2"> 9 <constructor-arg value="Ford"/> 10 <constructor-arg value="ChangAn"/> 11 <constructor-arg value="200000"/> 12 </bean> 13 </property> 14 <!--级联属性赋值,注意:属性需要先初始化后才可以为级联属性赋值,否则会有异常,和Struts2不同--> 15 <property name="car.maxSpeed" value="244"/> 16 <!--<property name="car" >--> 17 <!--<ref bean="car"/>--> 18 <!--</property>--> 19 </bean>
声明为内部Bean.内部Bean声明直接包含在<property>元素或<constructor-arg>元素里,不需要设置任何id或者name属性,内部Bean不能使用在其他任何地方。
null值和级联属性:和Struts、Hiberanate等框架一样,Spring支持级联属性的配置,这里需要注意:级联属性赋值,注意:属性需要先初始化后才可以为级联属性赋值,否则会有异常。