让我们说说自动装配吧,分别讲一下三种装配的用法,并写出代码和相应的xml文件并详细注释
时间: 2023-04-10 12:03:27 浏览: 86
好的,让我们来谈谈自动装配。自动装配是 Spring 框架中的一个重要特性,它可以帮助我们自动将 Bean 之间的依赖关系建立起来,从而简化了我们的配置工作。
在 Spring 中,有三种自动装配的方式,分别是 byName、byType 和 constructor。下面我将分别介绍这三种方式的用法,并提供相应的代码和 xml 配置文件。
1. byName 自动装配
byName 自动装配是根据 Bean 的名称来进行装配的。具体来说,当一个 Bean 中存在一个属性,它的名称与另一个 Bean 的名称相同,那么 Spring 就会自动将这两个 Bean 关联起来。
下面是一个示例代码:
```java
public class Person {
private Dog dog;
// setter and getter
}
public class Dog {
private String name;
// setter and getter
}
```
对应的 xml 配置文件如下:
```xml
<bean id="person" class="com.example.Person">
<property name="dog" ref="dog"/>
</bean>
<bean id="dog" class="com.example.Dog">
<property name="name" value="旺财"/>
</bean>
```
在这个例子中,我们定义了一个 Person 类和一个 Dog 类,Person 类中有一个名为 dog 的属性,它的类型是 Dog。在 xml 配置文件中,我们先定义了一个 id 为 dog 的 Bean,它的类型是 Dog,然后再定义了一个 id 为 person 的 Bean,它的类型是 Person,同时将它的 dog 属性设置为 dog Bean。
这样,当 Spring 容器启动时,它会自动将 person 和 dog 这两个 Bean 关联起来,从而实现自动装配。
2. byType 自动装配
byType 自动装配是根据 Bean 的类型来进行装配的。具体来说,当一个 Bean 中存在一个属性,它的类型与另一个 Bean 的类型相同,那么 Spring 就会自动将这两个 Bean 关联起来。
下面是一个示例代码:
```java
public class Person {
private Animal animal;
// setter and getter
}
public interface Animal {}
public class Dog implements Animal {
private String name;
// setter and getter
}
public class Cat implements Animal {
private String name;
// setter and getter
}
```
对应的 xml 配置文件如下:
```xml
<bean id="person" class="com.example.Person">
<property name="animal" ref="dog"/>
</bean>
<bean id="dog" class="com.example.Dog">
<property name="name" value="旺财"/>
</bean>
<bean id="cat" class="com.example.Cat">
<property name="name" value="小花"/>
</bean>
```
在这个例子中,我们定义了一个 Person 类和两个 Animal 的实现类:Dog 和 Cat。Person 类中有一个名为 animal 的属性,它的类型是 Animal。在 xml 配置文件中,我们先定义了两个 id 分别为 dog 和 cat 的 Bean,它们的类型分别是 Dog 和 Cat,然后再定义了一个 id 为 person 的 Bean,它的类型是 Person,同时将它的 animal 属性设置为 dog Bean。
这样,当 Spring 容器启动时,它会自动将 person 和 dog 这两个 Bean 关联起来,从而实现自动装配。
3. constructor 自动装配
constructor 自动装配是根据构造函数的参数类型来进行装配的。具体来说,当一个 Bean 的构造函数参数类型与另一个 Bean 的类型相同时,Spring 就会自动将这两个 Bean 关联起来。
下面是一个示例代码:
```java
public class Person {
private Animal animal;
public Person(Animal animal) {
this.animal = animal;
}
// getter
}
public interface Animal {}
public class Dog implements Animal {
private String name;
// setter and getter
}
public class Cat implements Animal {
private String name;
// setter and getter
}
```
对应的 xml 配置文件如下:
```xml
<bean id="person" class="com.example.Person" autowire="constructor"/>
<bean id="dog" class="com.example.Dog">
<property name="name" value="旺财"/>
</bean>
<bean id="cat" class="com.example.Cat">
<property name="name" value="小花"/>
</bean>
```
在这个例子中,我们定义了一个 Person 类和两个 Animal 的实现类:Dog 和 Cat。Person 类中有一个构造函数,它的参数类型是 Animal。在 xml 配置文件中,我们先定义了两个 id 分别为 dog 和 cat 的 Bean,它们的类型分别是 Dog 和 Cat,然后再定义了一个 id 为 person 的 Bean,它的类型是 Person,并将 autowire 属性设置为 constructor。
这样,当 Spring 容器启动时,它会自动将 person 和 dog 这两个 Bean 关联起来,从而实现自动装配。
以上就是 byName、byType 和 constructor 三种自动装配方式的用法和相应的代码和 xml 配置文件。希望能对你有所帮助!
阅读全文