实验一:按照bean的类型从IOC容器里面获取bean(这样就不需要强制转换)
@Test
public void test02(){
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
Person person01 = context.getBean(Person.class);
System.out.println(person01);
}
如果xml文件里面有两个相同类型的bean,如Person类型有两个bean,再向上面那样之指定类型获取bean就会报NoUniqueBeanDefinitionException错误
<!--class:要注册组件的全类名; bean:这个对象的唯一标识-->
<bean id = "person01" class="com.sf.jin.Person">
<!--使用property标签为Person对象的属性赋值-->
<property name="name" value="zhansgan"></property>
<property name="age" value="12"></property>
<property name="gender" value="man"></property>
<property name="email" value="183@qq.com"></property>
</bean>
<bean id = "person02" class="com.sf.jin.Person">
<!--使用property标签为Person对象的属性赋值-->
<property name="name" value="lisi"></property>
<property name="age" value="12"></property>
<property name="gender" value="man"></property>
<property name="email" value="183@qq.com"></property>
</bean>
那么就可以指定bean的id来获取bean,如下指定了Person类型的person01 就可以获取了
@Test
public void test02(){
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
Person person01 = context.getBean("person01",Person.class);
System.out.println(person01);
}
实验二:通过有参构造器创建对象并为bean的属性赋值
xml配置文件里面通过constructor-arg标签给属性赋值
<bean id = "person02" class="com.sf.jin.Person">
<!--使用有参构造器创建对象并为bean的属性赋值-->
<constructor-arg name="name" value="zhansgan"></constructor-arg>
<constructor-arg name="age" value="12"></constructor-arg>
<constructor-arg name="email" value="zhansgan@qq.com"></constructor-arg>
<constructor-arg name="gender" value="man"></constructor-arg>
</bean>
@Test
public void test03(){
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
System.out.println("IOC容器创建成功");
Person person = context.getBean("person02",Person.class);
System.out.println(person);
}
输出结果为:
有参构造器
IOC容器创建成功
Person{name='zhansgan', age=12, email='zhansgan@qq.com', gender='man'}
在IOC容器创建完成之前,bean就已经通过调用有参构造器创建成功了。
实验三:正确地为各种属性赋值
(1)为属性赋值为null,需要使用标签,不能使用value="null",如下为name赋值为null,使用了<null></null>标签
<bean id = "person03" class="com.sf.jin.Person">
<!--正确为各种属性赋值,为属性赋值为null值,需要使用标签,不能使用value="null"-->
<property name="name">
<null></null>
</property>
<property name="age" value="12"></property>
<property name="gender" value="man"></property>
<property name="email" value="183@qq.com"></property>
</bean>
(2)ref引用外部bean,person03引用了car01。也可以使用内部的bean,对car属性进行赋值
<bean id = "car01" class="com.sf.jin.Car">
<property name="carName" value="宝马"></property>
<property name="price" value="200000"></property>
<property name="color" value="blue"></property>
</bean>
<bean id = "person03" class="com.sf.jin.Person">
<!--正确为各种属性赋值,为属性赋值为null值,需要使用标签,不能使用value="null"-->
<property name="name">
<null></null>
</property>
<!--ref使用外部的值-->
<property name="car" ref="car01"></property>
<!--使用内部的bean-->
<property name="car">
<bean class="com.sf.jin.Car">
<property name="carName" value="奔驰"></property>
</bean>
</property>
</bean>