自动装配,官方给出的定义是这样:
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系。因此,如果可能的话,可以自

动让Spring通过检查BeanFactory中的内容,来替我们指定bean的协作者(其他被依赖的bean)。由于

autowire可以针对单个bean进行设置,因此可以让有些bean使用autowire,有些bean不采用。autowire的

方便之处在减少或者消除属性或构造器参数的设置,这样可以给我们的配置文件减减肥

其实,自动装配就是让我们少些几个  <ref ="...">.

我们还是从需求出发.我们假设有4个bean.分别是bean2,bean3,bean4,bean5..其中,bean2里面有后面几个

的引用..我只放出来bean2.java.

package com.test.model;
public class Bean2 {

private Bean3 bean3;

private Bean4 bean4;
 
 private Bean5 bean5;

public Bean3 getBean3() {
  return bean3;
 }

public void setBean3(Bean3 bean3) {
  this.bean3 = bean3;
 }

public Bean4 getBean4() {
  return bean4;
 }

public void setBean4(Bean4 bean4) {
  this.bean4 = bean4;
 }

public Bean5 getBean5() {
  return bean5;
 }

public void setBean5(Bean5 bean5) {
  this.bean5 = bean5;
 }
}
我们看不用自动装配的写法

<bean id="bean2" class="com.test.model.Bean2">
  <property name="bean3" ref="bean3"/>
  <property name="bean4">
   <ref bean="bean4"/>
  </property> 
  <property name="bean5" ref="bean5"/>
 </bean>

很明显,下面的几个属性设置是很繁琐的..我们假设使用自动装配.我们只需要这样

<bean id="bean2" class="com.test.model.Bean2" />

里面的装配都不用写.

当然,自动装配必须满足两点

(1)bean2.java里面的属性名字必须和applicationContext.xml里面对应的bean id的名字相同..也就是

private Bean3 bean3;  这个bean3(其实对应的是get,set方法)必须和

<bean id="bean3" class="com.test.model.Bean3"
  parent="abstractBean">
  <property name="name" value="Tom" />
  <property name="password" value="123" />
 </bean>  这个bean3相同.否则不能自动装配

(2)在申明里配置一个属性.default-autowire="byName"(通过名字自动装配)

配置文件为.

<?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-2.0.xsd"
 default-autowire="byName">

<bean id="abstractBean" abstract="true">
  <property name="id">
   <value>1000</value>
  </property>
  <property name="name" value="java" />
 </bean>
 <bean id="bean2" class="com.test.model.Bean2" />

<bean id="bean3" class="com.test.model.Bean3"
  parent="abstractBean">
  <property name="name" value="Tom" />
  <property name="password" value="123" />
 </bean>

<bean id="bean4" class="com.test.model.Bean4" parent="abstractBean" />

<bean id="bean5" class="com.test.model.Bean5">
  <property name="age" value="20" />
 </bean>

default-autowire="x"
x有4个选择:byName,byType,constructor和autodetect
1. byName:
Service.java
public class Service
{
    Source source;
    public void setSource(Source source)
    {
        this.source = source;
    }
}
applicationContext.xml
<beans
   ...
   default-autowire="byName">
    <bean id="source" class="cn.hh.spring.DBCPSource" scope="prototype"/>
    <bean id="service" class="cn.hh.spring.Service" scope="prototype">
    </bean>
</beans>
cn.hh.spring.DBCPSource实现了Source接口
xml中并没有给 bean service配Source属性,但在beans中设置了autowire="byName",这样配置文件会自

动根据 cn.hh.spring.Service 中的setSource找bean id="Source"的bean ,然后自动配上去,如果没找

到就不装配。
注意:byName的name是java中setXxxx 的Xxxx, 和上面设置的Source source中source拼写毫无关系,完

全可以是
public class Service
{
    Source source1;
    public void setSource(Source source1)
    {
        this.source1 = source1;
    }
}
2. byType:
Service.java同上
applicationContext.xml
<beans
   ...
   default-autowire="byType">
    <bean id="dbcpSource" class="cn.hh.spring.DBCPSource" scope="prototype"/>
    <bean id="service" class="cn.hh.spring.Service" scope="prototype">
    </bean>
</beans>
同样没有配置setSource,autowire改成 "byType",配置文件会找实现了Source接口的bean,这里

cn.hh.spring.DBCPSource 实现了Source接口,所以自动装配,如果没找到则不装配。
如果同个配制文件中两个bean实现了Source接口,则报错。
这里的 Type是指setSource(Source source)中参数的类型。
3. constructor:
试图在容器中寻找与需要自动装配的bean的构造函数参数一致的一个或多个bean,如果没找到则抛出异常


4. autodetect:
首先尝试使用constructor来自动装配,然后再使用byType方式。

转载于:https://www.cnblogs.com/E-star/p/3635150.html

spring的自动装配(default-autowire=byName)相关推荐

  1. Spring的Bean的自动装配属性autowire

    Spring自动注入 使用元素的 autowire 属性为一个 bean 定义指定自动装配模式 autowire设置值 no:没开启 byName: 根据bean的id名称,注入到对应的属性里面 by ...

  2. Spring注解驱动开发学习总结8:自动装配注解@Autowire、@Resource、@Inject

    Spring注解驱动开发学习总结8:自动装配注解@Autowire.@Resource.@Inject 1.自动装配@Autowire.@Resource.@Inject 1.1 构建bookDao ...

  3. Spring Beans 自动装配 使用XML配置列子(带源码)

    原文地址:http://websystique.com/spring/spring-beans-auto-wiring-example-using-xml-configuration/ [项目代码,在 ...

  4. Spring 的自动装配

    Spring 自动装配 set注入和构造注入有时在做配置时比较麻烦.所以框架为了提高开发效率,提供自动装配功能,简化配置.spring框架式默认不支持自动装配的,要想使用自动装配需要修改spring配 ...

  5. (Spring)自动装配bean

    文章目录 自动装配bean 1. 环境搭建 2. byName自动装配 3. byType自动装配 4. 使用注解自动装配 4.1 @Autowired和@Qualifier 4.2 @Resourc ...

  6. Spring学习——自动装配

    自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean有三种装配机制,分别是: 在xml中显式配置 ...

  7. Spring之自动装配

    Spring中有四种自动装配类型,分别为:byName,byType,constructor,autodetect,下面来分别介绍一下这些是如何自动装配的 <bean id="foo& ...

  8. Spring | Bean自动装配详解

    个人主页:BoBooY的CSDN博客_Java领域博主 前言:上节我给大家讲解了Spring的依赖注入,这一节我们讲解Spring中Bean如何自动装配,废话不多说,直接上正文! 文章目录 Bean的 ...

  9. Spring中自动装配的方式简介说明

    由于有了Spring自动装配的存在,才使得我们开发spring应用变的快捷,那么Spring自动装配有哪些方式呢? 下文笔者讲述Spring自动装配的方式分享,如下所示 Spring对外提供5种自动装 ...

  10. Bean的自动装配(autowire)

    自动装配 介绍 测试 环境搭配 创建三个实体类 beans.xml 结果 byname自动装配 更改上面的beans.xml 结果 再次修改beans.xml 修改beans.xml byType 测 ...

最新文章

  1. cocos creator 安卓原生平台环境_竞技对抗小游戏单挑篮球开发历程 | Cocos技术派第12期...
  2. TimeQuest约束外设之诡异的Create Generated Clocks用法
  3. asp.net mvc自动完成
  4. 基于深度学习的医学图像分割综述
  5. 商户监控中一个基础的反洗钱规则不要漏了
  6. 百度任玉刚写的对学习Android的理解
  7. php开发之文件指针,文件锁定
  8. 尜尜送的诗,以及我回的句
  9. 上任第十年,库克功与过
  10. 带着问题看 react-redux 源码实现
  11. python批量添加姓名生成奖状批量处理图片教师学生奖状
  12. 镁客网每周硬科技领域投融资汇总(3.24-3.30),FF喜提新救主...
  13. 酒店智能门锁常见故障及解决办法
  14. ajax提交到action乱码问题
  15. 女生适合学数据分析吗
  16. 保留核心,刺激进步 ——读《马克思传》有感
  17. 网络安全现状与未来蓝图||建立高效的网络安全体系
  18. STM32使用串口空闲中断接收不定长数据帧-USART_IT_IDLE使用(不使用DMA方式)
  19. Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)
  20. python如何调试

热门文章

  1. JWPlayer快速入门指南(中文)
  2. idea导入项目常见异常处理
  3. 数据结构与算法之优先队列
  4. 吉大计算机学院周柚,周柚
  5. ftp服务器通信协议设计,基于FTP协议的文件传输服务器的研究
  6. stn专线和otn有什么区别_专线网络和家庭宽带有什么区别?
  7. python操作之更新数据库中某个字段的数据
  8. ftp 上传文件夹_8uftp上传工具,8uftp上传工具的使用方法
  9. spring中配置ioc中的常用注解
  10. mysql自增主键到头了怎么办_数据库自增主键用完了怎么办