spring详解

来源:互联网 发布:win10多线程优化 编辑:程序博客网 时间:2024/05/22 09:39

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

 set注入和构造注入有时在做配置时比较麻烦。所以框架为了提高开发效率,提供自动装配功能,简化配置。Spring框架式默认不支持自动装配的,要想使用自动装配需要修改spring配置文件中<bean>标签的autowire属性。自动装配属性有5个值可选,分别代表不同的含义。 

本文工程免费下载

1、byName

从Spring环境中获取目标对象时,目标对象中的属性会根据名称在整个Spring环境中查找标签的id属性值。如果有相同的,那么获取这个对象,实现关联。

整个Spring环境:表示所有的spring配置文件中查找,那么id不能有重复的。

2、byType

从Spring环境中获取目标对象时,目标对象中的属性会根据类型在整个spring环境中查找标签的class属性值。如果有相同的,那么获取这个对象,实现关联。

    缺点:如果存在多个相同类型的bean对象,会出错。

如果属性为单一类型的数据,那么查找到多个关联对象会发生错误。

如果属性为数组或集合(泛型)类型,那么查找到多个关联对象不会发生异常。

3、constructor(3.x以上已不能用)

使用构造方法完成对象注入,其实也是根据构造方法的参数类型进行对象查找,相当于采用byType的方式。如果没找到则抛出异常

4、autodetect

自动选择:如果对象没有无参数的构造方法,那么自动选择constructor的自动装配方式进行构造注入。如果对象含有无参数的构造方法,那么自动选择byType的自动装配方式进行setter注入。

5、no

默认情况下,不自动装配,通过“ref”attribute手动设定。

    <bean>标签的 autowire 属性,它负责自动装配<bean>标签定义 JavaBean 的属性。这样做可以省去很多配置 JavaBean 属性的标签代码,使代码整洁、美观。但是它也有负面影响,即使用自动装配之后,无法从配置文件中读懂 JavaBean 需要什么属性。自动装配存在很多不正确的装配问题,例如错误装载属性、“byType”属性和“constructor”属性对相同类型参数无法判断等。当然,将自动装配和手动装配混合使用也能解决此问题。下面通过一个实例来分析如何使用自动装配。

首先创建创建一个学生类 Student,定义学号、姓名、性别、年龄等属性,并添加对

应的 set()与 get()方法。程序代码如下。

package com.autobean;

public class Student {
private String ID;
private String name;
private int age;
private String sex;

public String getID() {    return ID;}public void setID(String iD) {    ID = iD;}public String getName() {    return name;}public void setName(String name) {    this.name = name;}public int getAge() {    return age;}public void setAge(int age) {    this.age = age;}public String getSex() {    return sex;}public void setSex(String sex) {    this.sex = sex;}

}
同样创建一个教师类 Teacher,定义姓名、性别和年龄等属性,并添加对应的 set()与 get()方法。程序代码如下。

package com.autobean;

public class Teacher {
private String name;
private int age;
private String sex;

public String getName() {    return name;}public void setName(String name) {    this.name = name;}public int getAge() {    return age;}public void setAge(int age) {    this.age = age;}public String getSex() {    return sex;}public void setSex(String sex) {    this.sex = sex;}

}
创建教学档案类 TeachFile,定义 Teacher 和 Student 两个属性,并添加 print()方法。用于输出教师与学生的信息。程序代码如下。

package com.autobean;

public class TeachFile {
private Teacher teacher;
private Student student;
public TeachFile() {
}
public TeachFile(Teacher teacher, Student student) {
this.teacher = teacher;
this.student = student;
}

public Student getStudent() {    return this.student;}public void setStudent(Student student1) {    this.student = student1;}public Teacher getTeacher() {    return teacher;}public void setTeacher(Teacher teacher) {    this.teacher = teacher;}public void print() {    System.out.println("------教师信息------");    System.out.println("姓名:" + teacher.getName());    System.out.println("年龄:" + teacher.getAge());    System.out.println("性别:" + teacher.getSex());    System.out.println();    System.out.println("------学生信息------");    System.out.println("学号:" + student.getID());    System.out.println("姓名:" + student.getName());    System.out.println("年龄:" + student.getAge());    System.out.println("性别:" + student.getSex());}

}

在配置文件applicationContext.xml中定义刚刚创建的类,并为其赋值。其中 TeachFile 类采用了自动装配。程序代码如下。

0 0