Spring 装配 bean 的 xml 用法

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 :

  • id 是标识bean的名称, 通过这个名来获取 bean
  • class 是 bean 的全限定类名
  • 全文 bean 标签里面的 id 和 class 都是和这里一个意思, 下面不做解释
<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-命名空间) :

<?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-命名空间)

<?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

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念