文章目录
-
-
- 1.测试使用null值
- 2.为引用类型属性赋值
- 3.为List集合类型属性赋值
- 4.为Map集合类型属性赋值
- 5.为Properties类型属性赋值
- 6.利用util命名空间创建集合类型的bean
- 7.为级联属性赋值
-
-
为bean的属性赋值,即为依赖注入
-
依赖关系的管理:以后都交给Spring来维护
在当前类需要用到其他类的对象,由Spring为我们提供,我们只需要在配置文件中说明依赖关系的维护,就称为依赖注入。 -
但是属性有可能为各种类型的,大概可以分为以下几种类型:
1.基本类型和String类型
2.引用类型,这里指在配置文件中配置过的bean
3.复杂类型/集合类型
首先写一个Person实体类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private String lastName;
private int age;
private String gender;
private String email;
private Car car;
private List<Book> books;
private Map<String,Object> map;
private Properties properties;
}
Person实体类中的引用类Car:
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Car {
private String name;
private int price;
private String color;
}
Person实体类中的引用类Book:
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Book {
private String bookName;
private String authorName;
}
1.测试使用null值
对于引用类型,如果没有为属性赋值,默认为null
<!--测试使用null,引用类型默认为null,基本类型默认为默认值-->
<bean id="person01" class="com.hh.pojo.Person">
</bean>
2.为引用类型属性赋值
引用配置文件中配置过的bean对象,通过ref
标签
<!--引用外部bean-->
<bean id="car01" class="com.hh.pojo.Car">
<!--value里面只能写字符串-->
<property name="name" value="宝马"/>
<property name="color" value="黑色"/>
<property name="price" value="100000"/>
</bean>
<bean id="person02" class="com.hh.pojo.Person">
<!--ref:代表引用外面的一个值-->
<property name="car" ref="car01"/>
</bean>
测试类:
@Test
public void test(){
Person person = (Person)context.getBean("person02");
System.out.println(person);
System.out.println(person.getCar());
//通过Person类中的get方法获取car对象
Car car = person.getCar();
//通过Spring的配置文件得到ioc容器对象
Object bean2 = context.getBean("car01");
System.out.println(car==bean2);//true
}
在property标签内,引用外部对象
<!--引用内部bean-->
<bean id="person03" class="com.hh.pojo.Person">
<property name="car">
<!--对象可以使用bean标签创建-->
<bean class="com.hh.pojo.Car">
<property name="carName" value="自行车"/>
</bean>
</property>
</bean>
3.为List集合类型属性赋值
<!--配置Book对象-->
<bean id="book01" class="com.hh.pojo.Book">
<property name="bookName" value="红楼梦"/>
<property name="authorName" value="曹雪芹"/>
</bean>
<!--为List类型属性赋值-->
<bean id="person04" class="com.hh.pojo.Person">
<property name="books">
<!--相当于books = new ArrayList()-->
<list>
<!--引用内部的book对象-->
<bean class="com.hh.pojo.Book">
<property name="bookName" value="西游记"/>
<property name="authorName" value="罗贯中"/>
</bean>
<!--引用外部的book对象-->
<ref bean="book01"/>
</list>
</property>
</bean>
4.为Map集合类型属性赋值
<!--配置book对象-->
<bean id="book02" class="com.hh.pojo.Book">
<property name="bookName" value="红楼梦"/>
</bean>
<!--为Map集合属性类型赋值-->
<bean id="person05" class="com.hh.pojo.Person">
<property name="map">
<!--相当于map = new HashMap()-->
<map>
<!--一个entry代表一个键值对-->
<entry key="key01" value="张三"/>
<entry key="key02" value="李四"/>
<!--引用外部的bean对象-->
<entry key="key03" value-ref="book02"/>
<!--引用内部的bean对象-->
<entry key="key04">
<bean class="com.hh.pojo.Car">
<property name="carName" value="宝马"/>
</bean>
</entry>
</map>
</property>
</bean>
5.为Properties类型属性赋值
<bean id="perxon06" class="com.hh.pojo.Person">
<property name="properties">
<!--相当于properties = new Properties()-->
<props>
<prop key="username">root</prop>
<prop key="password">123</prop>
</props>
</property>
</bean>
6.利用util命名空间创建集合类型的bean
首先引入util命名空间
<?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:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd">
利用util命名空间创建集合类型的bean
<!--利用util命名空间创建集合类型的bean;方便别人引用-->
<!--相当于map=new LikedHashMap()-->
<util:map id="myMap">
<!--添加元素-->
<entry key="key01" value="张三"/>
<entry key="key02" value="李四"/>
<!--引用外部的bean对象-->
<entry key="key03" value-ref="book02"/>
<!--引用内部的bean对象-->
<entry key="key04">
<bean class="com.hh.pojo.Car">
<property name="carName" value="宝马"/>
</bean>
</entry>
</util:map>
<bean id="person07" class="com.hh.pojo.Person">
<property name="map" ref="myMap"/>
</bean>
7.为级联属性赋值
<bean id="car02" class="com.hh.pojo.Car">
<!--value里面只能写字符串-->
<property name="carName" value="宝马"/>
<property name="color" value="黑色"/>
<property name="price" value="100000"/>
</bean>
<!--级联属性赋值-->
<bean id="person08" class="com.hh.pojo.Person">
<!--为car赋值时,改变car的价格-->
<property name="car" ref="car02"/>
<property name="car.price" value="90000"/>
</bean>
测试类:
@Test
public void test7(){
Person person = (Person)context.getBean("person08");
Car car = context.getBean("car02",Car.class);
System.out.println(car);
System.out.println(person.getCar());
}