依赖注入Bean属性(xml)
1. 学生类部分代码:
private String name;
private int age;
private String address;
public Student() {
}
public Student(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
2. xml配置文件(对属性的设置相当于调用了其传三个参的构造方法)
<bean id="student1" class="service.models.Student">
<!--name是指构造方法中参数的名字-->
<constructor-arg name="name" value="zhangsan"></constructor-arg>
<constructor-arg name="address" value="wuhan"></constructor-arg>
<constructor-arg name="age" value="16"></constructor-arg>
</bean>
3. 测试类
private static void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("beans2.xml");
Student student = (Student) context.getBean("student1");
System.out.println(student);
}
- 例2,其实跟上面一样,只是在xml配置文件注入依赖对象的时候通过索引注入:
xml配置
<constructor-arg index="0" value="zhangsan" type="java.lang.String"></constructor-arg>
<constructor-arg index="2" value="wuhan" type="java.lang.String"></constructor-arg>
<constructor-arg index="1" value="16"></constructor-arg>
</bean>
<bean id="student2" class="service.models.Student">
<property name="name" value="fanlei"></property>
<property name="address" value="lichuan"></property>
<property name="age" value="18"></property>
</bean>
- 通过P 命名空间赋值(赋值的属性必须要有set方法)
- 例(xmlns xml namespace 即xml命名空间):
1. 在beans.xml最上面(就是在beans标签的开始)导入p标签的命名空间
xmlns:p="http://www.springframework.org/schema/p"
2. 然后在bean标签内部写上**p:属性=值**就好了
<bean id="student2_1" class="service.models.Student" p:name="lisi" p:address="sichuan" p:age="20"></bean>
- 对进行统一编程,所有的内容都是用value.
- 格式:
模板: <property name = "" value = #{表达式}>
#{123}, #{'abc'}---数字,字符串
#{beanid}---另一个bean的引用
#{beanid.propName}---操作对象的某个属性的值
#{beanid.toString()}---执行方法
#{T(类).字段|方法}---静态方法或字段
1. Student类中的属性(都有get和set方法)
private String name;
private int age;
private String address;
private Color color;
2. Color类
public class Color {
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return color;
}
}
3. xml配置文件
<!--声明一个color类的对象-->
<bean id="colorObject" class="service.models.Color" p:color="黄色">
</bean>
<!--SpEL表达式-->
<bean id="student" class="service.models.Student">
<!--<property name="name" value="#{'fanlei'}"></property>-->
<!--在这里字符串就是一个对象,可以调用方法,快速更改内容赋值-->
<property name="name" value="#{'fanlei'.toUpperCase()}"></property>
<!--调用静态方法/字段给属性赋值-->
<property name="age" value="#{T(Math).PI}"></property>
<!--调用另一个bean的引用,本例是在student类中调用color类的属性color并将其赋值给student类中的color, ref就是引用的意思-->
<!--该行代码表示将colorObject这个对象赋值给student的color属性-->
<!--<property name="color" ref="colorObject"></property>-->
<!--上面的代码等于下面这一句代码-->
<property name="color" value="#{colorObject}"></property>
<!--修改对象student的address属性为颜色类的属性color-->
<property name="address" value="#{colorObject.color}"></property>
</bean>
4. 测试类
private static void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("beans3.xml");
Student student = (Student) context.getBean("student");
System.out.println(student);
}
- 因为我们对象里的属性有可能是集合类型的,所以我们需要知道集合怎么注入的,集合的注入都是给添加子标签
数组: <array>
List: <list>
Set: <set>
Map: <map>, map存放k/v键值对,使用<entry描述>
Properties: <props> <prop key = ""></prop>
1. student类(都有get和set方法)
private String name;
private int age;
private String address;
private Color color;
private List<String> books;
2. xml配置文件
<bean id="student" class="service.models.Student">
<property name="name" value="#{'樊磊'}"></property>
<property name="books">
<list>
<value>语文</value>
<value>数学</value>
<value>英语</value>
</list>
</property>
</bean>
3. 测试类
private static void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("beans4.xml");
Student student = (Student) context.getBean("student");
System.out.println(student);
输出: Student{name='樊磊', age=0, address='null', color=null, books=[语文, 数学, 英语]}
}
- 例2–Map(前面的和上面差不多,我就只给配置文件的了)
配置文件
<bean id="student" class="service.models.Student">
<property name="name" value="#{'樊磊'}"></property>
<property name="books">
<map>
<entry key="语文" value="必修"></entry>
<entry key="数学" value="必修"></entry>
<entry key="英语" value="必修"></entry>
</map>
</property>
</bean>
<bean id="student" class="service.models.Student">
<property name="name" value="#{'樊磊'}"></property>
<property name="books">
<props>
<prop key="语文">最容易</prop>
<prop key="数学">最难</prop>
<prop key="英语">还可以</prop>
</props>
</property>
</bean>