Spring中Bean的自动装配

Bean的自动装配

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

在Spring中Bean的三种装配方式

  1. 在xml中显示的装配
  2. 在Java中显示装配
  3. 隐式的自动装配Bean(重要方式)

测试

  • 环境搭建

  • XML方式实现装配

    • beans.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"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
      
          <bean id="cat" class="com.liu.pojo.Cat"/>
          <bean id="dog" class="com.liu.pojo.Dog"/>
          <bean id="people" class="com.liu.pojo.People">
              <property name="name" value="就是我啊"/>
              <property name="dog" ref="dog"/>
              <property name="cat" ref="cat"/>
          </bean>
          
      </beans>
      
    • 一个人有两个宠物!People类

    package com.liu.pojo;
    
    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;
        }
    
        @Override
        public String toString() {
            return "People{" +
                    "cat=" + cat +
                    ", dog=" + dog +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
    
    
    • 测试是否可以获取到宠物,并执行叫声方法
    @Test
        public void test1() {
            ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
            People people = context.getBean("people", People.class);
            people.getDog().shout();
            people.getCat().shout();
        }
    
  • byName 自动装配方式

    • <bean id="cat" class="com.liu.pojo.Cat"/>
      <bean id="dog" class="com.liu.pojo.Dog"/>
      <bean id="people" class="com.liu.pojo.People" autowire="byName">
      	<property name="name" value="就是我啊"/>
      </bean>
      
    • byName:会自动在容器 上下文中查找,和自己对象set方法后面的值对应的Bean Id!

    • 需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的小写值一致

  • byType方式 自动装配

    •  <bean id="cat" class="com.liu.pojo.Cat"/>
       <bean id="dog111" class="com.liu.pojo.Dog"/>
       <bean id="people" class="com.liu.pojo.People" autowire="byType">
        	<property name="name" value="就是我啊"/>
        </bean>
      
    • byType:会自动在容器 上下文中查找,和自己对象属性类型(Class)相同的Bean

    • 需要保证属性类型唯一

使用注解实现自动装配

JDK 1.5支持的注解,Spring2.5就支持注解了

要使用注解须知:

  1. 导入约束

在这里插入图片描述

  1. 配置注解支持

在这里插入图片描述

  1. People使用注解方式注入
    在这里插入图片描述

使用Autowired注解时,可以不需要set方法,前提是你这个自动装配的属性在IOC容器中存在,且符合名字byName,因为注解是使用反射来实现的,可以不需要set方法。

注意:

@Nullable 字段标记了这个注解,说明这个字段可以为null

@Autowired(required =false) 如果显示定义了Autowired的required属性为false,说明这个对象可以为null,默,默认为true,不允许为空

@Qualifier(value="") 如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个@Autowired完成的时候,可以使用@Qualifier(value=“xxx”)去配置@Autowired的 使用,指定一个唯一的bean对象注入!

  1. @Resource注解

在这里插入图片描述

同样可以实现自动装配,前提是bean的id与属性值匹配,否则指定Resource的name属性标识选择的bean

@Resource 和@Autowired的比较

  • 都是用来自动装配的
  • 都可以放在属性字段上
  • @Autowired 通过byType的方式实现
  • @Rescource 默认是通过byName方式实现,如果找不到 名字,则通过byType实现!如果两个都找不到的情况下,就报错!
  • 执行顺序不同:@Autowired 通过byType的方式实现的,@Resource默认通过byName的方式实现的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值