- java类中的属性类型可分为基本数据类型:int.double,引用数据类型:String.还有基本数据类型的封装:Integer,Double等等.还有自定义的类型.
- Spring在为类属性赋值的时候,可以有不同的方式
<bean id="person2" class="mao.shu.spring.Person">
<!--通过value属性赋值-->
<constructor-arg name="id" value="789" type="java.lang.Integer"/>
<!--包含特殊字符,使用<![CDATA[]]>-->
<constructor-arg name="name" type="java.lang.String">
<value><![CDATA[<xiemaoshu>]]]></value>
</constructor-arg>
<!--使用value标签赋值-->
<constructor-arg name="balance" type="double">
<value>500.5</value>
</constructor-arg>
</bean>
- 测试结果
引用其他Bean
-
示例:现在有两个java程序类
- Person类:包含name,age,pNumber三个基本类型属性,还有一个student属性,该属性类型是自定义的java程序类
- Student类:包含school,specialty两个基本类型属性
-
Person类
public class Person {
//类成员
private Integer id;
private String name;
private Integer age;
private double balance;
private Student student;
//getter和setter方法
//toString方法
}
- Student类
public class Student {
private String school;
private String specialty;
//getter和setter方法
//toString()方法
}
- 在Spring配置文件中配置
<bean id="student1" class="mao.shu.spring.Student">
<property name="school" value="风中"/>
<property name="specialty" value="吃饭"/>
</bean>
<bean id="person3" class="mao.shu.spring.Person">
<property name="id" value="9527"/>
<property name="name" value="9527-xiemaoshu"/>
<property name="age" value="22"/>
<property name="balance" value="789456.25"/>
<property name="student" ref="student1"/>
</bean>
- 测试获取"person3"实例化对象
public class Begin {
public static void main(String[]args){
ApplicationContext app = new ClassPathXmlApplicationContext("spring-config.xml");
Person person3 = (Person) app.getBean("person3");
System.out.println(person3);
}
- 如果使用构造器的方式配置
<bean id="person2" class="mao.shu.spring.Person">
<!--通过value属性赋值-->
<constructor-arg name="id" value="789" type="java.lang.Integer"/>
<!--包含特殊字符,使用<![CDATA[]]>-->
<constructor-arg name="name" type="java.lang.String">
<value><![CDATA[<xiemaoshu>]]]></value>
</constructor-arg>
<constructor-arg name="age" value="22"/>
<!--使用value标签赋值-->
<constructor-arg name="balance" type="double">
<value>500.5</value>
</constructor-arg>
<!--通过构造器注入引用bean属性-->
<constructor-arg name="student" ref="student1"></constructor-arg>
</bean>
<bean id="student1" class="mao.shu.spring.Student">
<property name="school" value="风中"/>
<property name="specialty" value="吃饭"/>
</bean>
内部Bean
- 示例内部bean的配置方式
<bean id="person4" class="mao.shu.spring.Person">
<property name="id" value="9527"/>
<property name="name" value="9527-xiemaoshu"/>
<property name="age" value="22"/>
<property name="balance" value="789456.25"/>
<property name="student">
<!--由于内部bean无法被其他外部bean所使用,因此不需要设置id属性-->
<bean class="mao.shu.spring.Student">
<property name="school" value="内部bean测试"/>
<property name="specialty" value="测试"/>
</bean>
</property>
</bean>
null 值和级联属性
-
级联属性指的是关联Bean中的成员变量,例如:Person中有一个关联的Bean:Student类属性引用,Student类中的"school"成员变量和"specialty"成员变量,他们就是Person类的级联属性
-
需要注意的是:如果要为级联属性赋值,那么急脸熟性必须先初始化
private Student student = new Student();
- 如果级联属性没有先初始化则会出现以下错误
- 示例:为bean设置null值
<bean id="person3" class="mao.shu.spring.Person">
<property name="id" value="9527"/>
<property name="name" value="9527-xiemaoshu"/>
<property name="age" value="22"/>
<property name="balance" value="789456.25"/>
<property name="student">
<null/>
</property>
</bean>
- 为关联属性赋值
<bean id="person3" class="mao.shu.spring.Person">
<property name="id" value="9527"/>
<property name="name" value="9527-xiemaoshu"/>
<property name="age" value="22"/>
<property name="balance" value="789456.25"/>
<!--为关联属性赋值-->
<property name="student.school" value="关联属性赋值测试"/>
<property name="student.specialty" value="关联属性"/>
</bean>
集合属性
- 示例:为Persson类中添加一个List集合属性,并设置getter和setter方法
// 集合属性
private List<Friend> friends;
public List<Friend> getFriends() {
return friends;
}
public void setFriends(List<Friend> friends) {
this.friends = friends;
}
- Friends类
public class Friend {
private String name;
private Integer age;
//getter和setter方法
//构造方法
//toString方法
}
- 设置Spring配置文件
<bean id="person5" class="mao.shu.spring.Person">
<property name="id" value="141999"/>
<property name="name" value="141999-xiemaoshu"/>
<property name="age" value="22"/>
<property name="balance" value="789456.25"/>
<property name="student">
<!--由于内部bean无法被其他外部bean所使用,因此不需要设置id属性-->
<bean class="mao.shu.spring.Student">
<property name="school" value="内部bean测试"/>
<property name="specialty" value="测试"/>
</bean>
</property>
<!--配置List集合-->
<property name="friends">
<list>
<ref bean="friend1"/>
<ref bean="friend2"/>
</list>
</property>
</bean>
<bean id="friend1" class="mao.shu.spring.Friend">
<constructor-arg name="name" value="Lanchaogou"></constructor-arg>
<constructor-arg name="age" value="23"></constructor-arg>
</bean>
<bean id="friend2" class="mao.shu.spring.Friend">
<constructor-arg name="name" value="windows10"></constructor-arg>
<constructor-arg name="age" value="2"></constructor-arg>
</bean>
- 测试
public class Begin {
public static void main(String[]args){
ApplicationContext app = new ClassPathXmlApplicationContext("spring-config.xml");
Person person5 = (Person) app.getBean("person5");
System.out.println(person5);
}
}
- 运行结果
注入Map集合属性
- 示例:在Person中添加Map集合属性
private Map<String,Object> outher;
- 配置Spring文件
<bean id="person6" class="mao.shu.spring.Person">
<constructor-arg name="id" value="9527" index="0"/>
<constructor-arg name="name" value="xiemaoshu" index="1"/>
<constructor-arg name="age" value="22" index="2"/>
<!--配置map集合-->
<property name="outher">
<map key-type="java.lang.String" value-type="java.lang.Object">
<entry key="firend1" value-ref="friend1"/>
<entry key="firend2" value-ref="friend2"/>
</map>
</property>
</bean>
- 测试
public class Begin {
public static void main(String[]args){
ApplicationContext app =
new ClassPathXmlApplicationContext("spring-config.xml");
Person person6 = (Person) app.getBean("person6");
System.out.println(person6.getOuther());
}
}
使用util:list 命名空间(scheme)定义集合
- 示例:
<!--定义List<Friend> 集合-->
<util:list id="firends">
<ref bean="friend1"/>
<ref bean="friend2"/>
</util:list>
<!--定义List<Person> 集合-->
<util:list id="persons">
<ref bean="person1"/>
<ref bean="person2"/>
<ref bean="person3"/>
<ref bean="person4"/>
<ref bean="person5"/>
<ref bean="person6"/>
</util:list>
- 其他的Bean要使用集合只需使用id即可
<bean id="person6" class="mao.shu.spring.Person">
<constructor-arg name="id" value="9527" index="0"/>
<constructor-arg name="name" value="xiemaoshu" index="1"/>
<constructor-arg name="age" value="22" index="2"/>
<!--配置map集合-->
<property name="outher">
<map key-type="java.lang.String" value-type="java.lang.Object">
<!--引用List集合-->
<entry key="friends" value-ref="firends"/>
<entry key="persons" value-ref="persons"/>
</map>
</property>
</bean>
- 测试
public class Begin {
public static void main(String[]args){
ApplicationContext app =
new ClassPathXmlApplicationContext("spring-config.xml");
Person person6 = (Person) app.getBean("person6");
System.out.println(person6.getOuther());
}
}
- 得到的结果
使用P命名空间
- 示例:
<!--使用p命名空间-->
<bean id="person7" class="mao.shu.spring.Person" p:id="123" p:name="p命名空间测试" p:balance="500">
</bean>
- 测试
public class Begin {
public static void main(String[]args){
ApplicationContext app =
new ClassPathXmlApplicationContext("spring-config.xml");
Person person7 = (Person) app.getBean("person7");
System.out.println(person7.getId());
System.out.println(person7.getName());
System.out.println(person7.getBalance());
}
}