前言
- Bean的装配方式有三种:
- .xml文件中显示配置。
- 在Java中显示配置。
- 隐式自动配置。
- 自动装配目的:无需再手动指定property中传入的属性值
一、byName实现自动装配
- 方法:在xml文件中添加
<bean id="xxx" class="xxx" autowire="byName">
- 注意: byName会自动在容器上下文查找和bean对象set方法传入参数值一致的bean id,使用时需保证bean的id唯一。
- 代码示例:
1.创建测试实体类:
// 测试实体类1:Cat
public class Cat {
public void cry(){
System.out.println("miao~");
}
}
// 测试实体类2:Dog
public class Dog {
public void cry(){
System.out.println("wang~");
}
}
// 测试实体类3:People
public class People {
private Cat cat;
private Dog dog;
private String name;
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- 创建配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="cat" class="Cat"></bean>
<bean id="dog" class="Dog"></bean>
<bean id="people" class="People" autowire="byName">
注意:Bean的id需为”cat“、”dog“,与set方法对应,否则报错。
- 测试
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
People people = context.getBean("people", People.class);
people.getCat().cry();
people.getDog().cry();
}
}
二、byTpye实现自动装配
- 方法:在xml文件中添加
<bean id="xxx" class="xxx" autowire="byType"">
- 注意:byType会自动在容器上下文查找和自己对象类型相同的bean,也就是相同的class。因此需保证class全局唯一。
- 代码:仅修改了配置文件中的内容。
<bean id="cat1" class="com.ali.Cat"></bean>
<bean id="dog" class="com.ali.Dog"></bean>
<bean id="people" class="com.ali.People" autowire="byType"></bean>
三、注解@Autowired实现自动装配
- 方法:
- 导入约束:
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
</beans>
- 配置注解的支持:
<context:annotation-config/>
- 添加注解
在需要传入值的属性上方添加注解:
@Autowired
@Qualifier(value = "id")
其中@Autowired能按byName或者byType(我测试结果也可以按byType装配,但是我看的视频讲解是说按byName形式)形式进行自动装配。当不同bean对应同一个类型时,需使用 @Qualifier(value = “id”)指定bean的id名称。
- 代码示例如下:
// 实体类
public class People {
@Autowired
@Qualifier(value = "cat1")
private Cat cat;
@Autowired
private Dog dog;
private String name;
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "People{" +
"cat=" + cat +
", dog=" + dog +
", name='" + name + '\'' +
'}';
}
}
// .xml配置文件
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<bean id="cat1" class="com.ali.Cat"></bean>
<bean id="cat12" class="com.ali.Cat"></bean>
<bean id="dog11" class="com.ali.Dog"></bean>
<bean id="people" class="com.ali.People"></bean>
</beans>
四、利用Java中的注解@Resource实现自动装配
- 方法:在需要传入值的属性上方添加注解:
@Resource(name="cat1")
其中@Resource能按byName或者byType形式(我测试结果也可以按byName装配,但是我看的视频讲解是说按byName形式)进行自动装配。当不同bean对应同一个类型时,需使name指定bean的id名称。