Spring 装配 bean 的 xml 用法
说明 : 本文是介绍装配 bean 时的各种简单配置,讲解的主要是 xml 配置。
Spring 从两个角度来实现自动化装配
context:component-scan标签用来配置包扫描器,base-packag配置的包和及其子包都会被扫描。
<context:component-scan base-package=""/>
@Component注解用来告诉spring容器这个类需要生成 bean。
@Autowired注解实现自动装配。自动匹配spring容器符合的 bean。
@Setter
@Getter
@Component
// bean
public class Student {
private String name;
@Autowired
private Teacher teacher;
}
@Setter
@Getter
@Component
// bean
public class Teacher {
private String name;
private Integer age;
}
// 测试用类
public class TestCase {
private static ApplicationContext applicationContext = new ClasspathXmlApplicationContext("applicationContext.xml");
@Test
public void test() {
Student student = applicationContext.getBean("student", Student.class);
System.out.println(student);
System.out.println(student.getTeacher());
}
}
测试输出结果如下 : 表明 Student 和 Teacher 装配成功。
com.zl.model.Student@77e9807f
com.zl.model.h.Teacher@448ff1a8
用 xml 配置 bean 的装配
实体bean :
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private String name;
private Teacher teacher;
}
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
private String name;
private Integer age;
}
普通的配置 bean :
<bean id="student" class="com.zl.model.Student"/>
用构造器依赖注入(constructor-arg标签) :
- name 是构造器的参数名
- value 是值
- ref 是引用其他 bean 的 id
<bean id="student" class="com.zl.model.Student">
<constructor-arg name="name" value="XXX"/>
<constructor-arg name="teacher" ref="teacher"/>
</bean>
<bean id="teacher" class="com.zl.model.h.Teacher">
<constructor-arg name="name" value="XXX"/>
<constructor-arg name="age" value="18"/>
</bean>
用构造器依赖注入(c-命名空间) :
- c:_0=“XXX” 指的是构造函数的第一个参数
- c:1-ref=“teacher” 指的是构造函数的第二个参数。C: 后面的数字指的是构造函数的第几个参数。有 ref 指的是引用, 没有指的是字面量
用 c- 命名空间需要在 xml 配置文件上加入 xmlns:c=“http://www.springframework.org/schema/c” 整体如下 :
<?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:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="student" class="com.zl.model.Student" c:_0="XXX" c:_1-ref="teacher"/>
<bean id="teacher" class="com.zl.model.h.Teacher" c:_0="XXX" c:_1="18"/>
</beans>
用 setter 方法依赖注入(property标签) :
- name 是属性名
- value 是值
- ref 是引用其他 bean 的 id
<bean id="student" class="com.zl.model.Student">
<property name="name" value="XXX"/>
<property name="teacher" ref="teacher"/>
</bean>
<bean id="teacher" class="com.zl.model.h.Teacher">
<property name="name" value="XXX"/>
<property name="age" value="18"/>
</bean>
用 setter 方法依赖注入(p-命名空间)
- p:name=“XXX” 指的是 name 属性
- p:teacher-ref=“teacher” 指的是 teacher 属性。C:后面的值指的是属性的名。有 ref 指的是引用, 没有指的是字面量
用 p- 命名空间需要在 xml 配置文件上加入 xmlns:p=“http://www.springframework.org/schema/p” 整体如下 :
<?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="student" class="com.zl.model.Student" p:name="XXX" p:teacher-ref="teacher"/>
<bean id="teacher" class="com.zl.model.h.Teacher" p:name="XXX" p:age="18"/>
</beans>
c- 或 p- 命名空间都不能引用集合, spring 的 util 命名空间正好可以弥补这个缺陷。
util 命令空间中的元素 :
元素 | 描述 |
---|---|
<util:list> | 创建一个java.util.list集合 |
<util:set> | 创建一个java.util.Set集合 |
<util:map> | 创建一个java.util.Map集合 |
例子 :
<util:list>
<value></value>
</util:list>
<util:set>
<value></value>
</util:set>
<util:map>
<entry key="" value=""/>
</util:map>
上面用 xml 配置 bean 的测试如下 :
public class TestCase {
private static ApplicationContext applicationContext = new ClasspathXmlApplicationContext("applicationContext.xml");
@Test
public void test() {
Student student = applicationContext.getBean("student", Student.class);
System.out.println(student.getName());
System.out.println(student.getTeacher().getName());
System.out.println(student.getTeacher().getAge());
}
}
输出结果 :
XXX
XXX
18
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。