spring对象的获取及属性赋值方式:
4、通过命名空间为bean赋值,简化配置文件中属性声明的写法
5、为复杂类型进行赋值操作
见代码。
6、继承关系bean的配置
7、bean对象创建的依赖关系
代码示例:
Person类:
package com.zhoulz.bean;
import java.util.*;
/**
* @Auther: zhoulz
* @Description: com.zhoulz.bean
* @version: 1.0
*/
public class Person {
private int id;
private String name;
private Integer age;
private String gender;
//复杂类型
private String[] hobbies;
private Address address;
//private List<String> lists;
private List<Address> lists;
private Set<String> sets;
private Map<String,Object> maps;
private Properties properties;
public Person() {
System.out.println("person被创建了!");
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String[] getHobbies() {
return hobbies;
}
public void setHobbies(String[] hobbies) {
this.hobbies = hobbies;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public List<Address> getLists() {
return lists;
}
public void setLists(List<Address> lists) {
this.lists = lists;
}
public Set<String> getSets() {
return sets;
}
public void setSets(Set<String> sets) {
this.sets = sets;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", hobbies=" + Arrays.toString(hobbies) +
", address=" + address +
", lists=" + lists +
", sets=" + sets +
", maps=" + maps +
", properties=" + properties +
'}';
}
}
Address类:
package com.zhoulz.bean;
/**
* @Auther: zhoulz
* @Description: com.zhoulz.bean
* @version: 1.0
*/
public class Address {
private String province;
private String city;
private String town;
public Address() {
System.out.println("Address被创建了");
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getTown() {
return town;
}
public void setTown(String town) {
this.town = town;
}
@Override
public String toString() {
return "Address{" +
"province='" + province + '\'' +
", city='" + city + '\'' +
", town='" + town + '\'' +
'}';
}
}
测试类:
import com.zhoulz.bean.Address;
import com.zhoulz.bean.Person;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @Auther: zhoulz
* @Description: PACKAGE_NAME
* @version: 1.0
*/
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("ioc.xml");
/*Person person = context.getBean("person", Person.class);
System.out.println(person);*/
/*Person person2 = context.getBean("person2", Person.class);
System.out.println(person2);*/
/*Person person3 = context.getBean("person3", Person.class);
System.out.println(person3);//hobbies=[book, girl, movies]*/
/*Address address2 = context.getBean("address2", Address.class);
System.out.println(address2);//内部bean——不可以直接获取 */
//bean之间的继承关系
Person son = context.getBean("son", Person.class);
System.out.println(son);
Person parent = context.getBean("parent", Person.class);
System.out.println(parent);
}
}
ioc.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="person" class="com.zhoulz.bean.Person" > <!--单例-->
<property name="id" value="1"></property>
<property name="name" value="lisi"></property>
<property name="age" value="20"></property>
<property name="gender" value="男"></property>
</bean>
<!--需要在上面加上:xmlns:p="http://www.springframework.org/schema/p",
使用p命名空间来给属性赋值:-->
<bean id="person2" class="com.zhoulz.bean.Person"
p:id="2"
p:name="wangwu"
p:age="30"
p:gender="男">
</bean>
<!--给复杂类型进行赋值操作-->
<bean id="person3" class="com.zhoulz.bean.Person" > <!--单例-->
<property name="id" value="3"></property>
<property name="name" value="wangwuu3"></property>
<property name="age" value="33"></property>
<property name="gender" value="男"></property>
<!--给数组赋值,使用array标签(用的更多)-->
<!--<property name="hobbies" value="book,girl,movies"></property>-->
<!--换个友好的方式-->
<property name="hobbies">
<array>
<value>book</value>
<value>girl</value>
<value>movies</value>
</array>
</property>
<!--给引用类似赋值(先在这个bean外面重新写一个id为address的bean))-->
<!--然后使用ref引入外部bean:-->
<property name="address" ref="address"></property>
<!--给list赋值-->
<!--<property name="lists" value="1,2,3"></property>-->
<!--换个方式(把里面的String换成了Address)-->
<property name="lists">
<list>
<!--使用内部bean,此时,无法从IOC容器直接获取对象的值-->
<bean id="address2" class="com.zhoulz.bean.Address">
<property name="province" value="北京"></property>
<!--后面可写全-->
<property name="town" value="海淀"></property>
</bean>
<bean class="com.zhoulz.bean.Address">
<property name="province" value="上海"></property>
</bean>
<!--还可以-使用外部bean,此时,可以随意从IOC容器获取对象的值-->
<ref bean="address"></ref>
</list>
</property>
<!--给set属性赋值-->
<property name="sets">
<set>
<value>zhangsan</value>
<value>zhangsan</value> <!--设置一个重复的—— 则获取的时候只有一个值,因为Set自己具备的唯一特性-->
<value>lisi</value> <!--获取的结果为:sets=[zhangsan, lisi] -->
</set>
</property>
<!--给map赋值-->
<property name="maps">
<map> <!--下面为3种不同的写法-->
<entry key="a" value="aaa"></entry>
<entry key="address" value-ref="address"></entry>
<entry key="address2">
<bean class="com.zhoulz.bean.Address">
<property name="province" value="广东"></property>
</bean>
</entry>
<!--还有Object类型,所以还可以:-->
<entry>
<key>
<value>heiehi</value>
</key>
<!--不能直接这样写:不然,运行时会报“元素"key"必须不包含子集[key]”,因为该类型的内容类型为"仅元素"”的错误-->
<!--<key>heihei<key>-->
<value>haha</value>
</entry>
<!--写法同上,试试list-->
<entry key="list">
<list>
<value>11</value>
<value>22</value>
</list>
</entry>
</map>
</property>
<!--给properties赋值-->
<property name="properties">
<props>
<prop key="111">aaa</prop>
<prop key="222">bbb</prop>
</props>
</property>
</bean>
<!--(见上面)给引用类似赋值,需要先在上面的bean外面提前写一个id为address的bean))-->
<bean id="address" class="com.zhoulz.bean.Address">
<property name="province" value="安徽省"></property>
<property name="city" value="芜湖"></property>
<property name="town" value="无为"></property>
</bean>
<!--bean之间的继承关系-->
<!--可以使用abstract标签定义抽象bean,无法进行实例化-->
<bean id="parent" class="com.zhoulz.bean.Person" abstract="false">
<property name="id" value="1"></property>
<property name="name" value="lisi"></property>
<property name="age" value="20"></property>
<property name="gender" value="男"></property>
</bean>
<!--可以通过parent属性来获取父bean中的某些属性值-->
<bean id="son" class="com.zhoulz.bean.Person" parent="parent">
<property name="name" value="haha"></property>
</bean>
<!--创建bean的时候依赖关系-->
<!--当bean对象被创建的时候,是按配置文件定义的顺序创建的,谁在前,谁就被先被创建
如果需要干扰创建的顺序,可以使用depends-on
一般在实际的工作中,不必在意bean创建的顺序,无论谁先创建,需要依赖的对象在创建完成之后都会进行赋值操作-->
<!--<bean id="address" class="com.zhoulz.bean.Address" depends-on="person"></bean>
<bean id="person" class="com.zhoulz.bean.Person"></bean>-->
<!--结果:person在前-->
</beans>
上面,给properties赋值的方式:其实就是key-value的键值对象
写法类似于:
在resources下创建一个db.properties的配置文件: