Spring中Bean的自动装配

文章目录

      • 1.byName自动装配
      • 2.byType自动装配
      • 3.使用注解支持自动装配
        • 3.1 @Autowire
        • 3.2 @Qualifier(value="dog1")
        • 3.3 @Resource

自动装配是Spring满足bean依赖的一种方式
Spring在上下文中自动寻找,并自动给Bean装配属性

在Spring中有三种装配的方式:

  • 1.在xml中显式的装配
  • 2.在java中显式的装配
  • 3.隐式的自动装配(重要)

这里只讲第三种自动装配:

1.byName自动装配

<bean id="cat" class="com.kuang.pojo.Cat"/>
<bean id="dog" class="com.kuang.pojo.Dog"/>


<bean id="people" class="com.kuang.pojo.People" autowire="byName">
    <property name="name" value="小狂神呀"/>
bean>

1.将查找其类中所有的set方法名,例如setCat,获得将set去掉并且首字母小写的字符串,即cat。
2.需要保证所有的bean的id唯一

2.byType自动装配

<bean id="cat" class="com.kuang.pojo.Cat"/>
<bean id="dog" class="com.kuang.pojo.Dog"/>
    
<bean id="people" class="com.kuang.pojo.People" autowire="byType">
     <property name="name" value="小狂神呀"/>
bean>

需要保证:需要保证所有的bean的class唯一

3.使用注解支持自动装配

1.导入约束
2.配置注解的支持


<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
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    
    <context:annotation-config/>
beans>

3.1 @Autowire

直接在属性上使用即可,还可以在setter方法上使用
使用Autowired我们就可以不用编写setter方法了

import org.springframework.beans.factory.annotation.Autowired;
public class People {
   @Autowired
   private Cat cat;
   @Autowired
   private Dog dog;
   private String name;

    public Cat getCat() {
        return cat;
    }
    public Dog getDog() {
        return dog;
    }
    public String getName() {
        return name;
    }
    @Override
    public String toString() {
        return "People{" +
                "cat=" + cat +
                ", dog=" + dog +
                ", name='" + name + '\'' +
                '}';
    }
}

如果 @Autowired(required = false),说明这个对象可以为null,否则不能为null

 @Autowired(required = false)
   private Dog dog;

Spring中Bean的自动装配_第1张图片
Spring中Bean的自动装配_第2张图片

3.2 @Qualifier(value=“dog1”)

如果 @Autowired的环境比较复杂,自动装配无法通过一个注解 @Autowired完成(无法通过byName和byType匹配的时候),可以使用@Qualifier,指定指向的对象


<context:annotation-config/>
<bean id="cat1" class="com.kuang.pojo.Cat"/>
<bean id="cat2" class="com.kuang.pojo.Cat"/>
<bean id="dog1" class="com.kuang.pojo.Dog"/>
<bean id="dog2" class="com.kuang.pojo.Dog"/>
<bean id="people" class="com.kuang.pojo.People"/>
public class People {
   @Autowired
   @Qualifier(value = "cat1")
   private Cat cat;
   @Autowired(required = false)
   @Qualifier(value="dog2")
   private Dog dog;
}

Spring中Bean的自动装配_第3张图片

3.3 @Resource


<context:annotation-config/>
<bean id="cat1" class="com.kuang.pojo.Cat"/>
<bean id="cat2" class="com.kuang.pojo.Cat"/>
<bean id="dog2" class="com.kuang.pojo.Dog"/>
<bean id="people" class="com.kuang.pojo.People"/>
public class People {
   @Resource(name = "cat2")
   private Cat cat;
   @Resource
   private Dog dog;
   private String name;
}

Spring中Bean的自动装配_第4张图片
总结:
@Resource和@Autowired的区别:
都是用来自动装配的
@Autowired通过byName和byType的方式实现
@Resource默认通过byName的方式实现,如果找不到名字,可以通过byType的方式实现

你可能感兴趣的:(Spring)