目录

  • 1.自动装配-autowire
  • 2.autowire的四种模式
  • 3.使用自动装配
    • 3.1 使用byName自动装配
    • 3.2 使用byType自动装配
  • 资源类和配置文件

1.自动装配-autowire

使用基于 XML 的配置bean时,可以使用<bean / > 元素的autowire属性为 bean 定义指定自动装配模式。

自动装配具有以下优点:

  • 自动装配可以大大减少指定属性或构造函数参数的需要
  • 随着对象的 Developing,自动装配可以更新配置。

但是也有些局限性和缺点:

  • property和constructor-arg设置中的显式依赖项始终会覆盖自动装配。
  • 自动装配不如显式接线精确。
  • 接线信息可能不适用于可能从 Spring 容器生成文档的工具。
  • 容器内的多个 bean 定义可能与要自动装配的 setter 方法或构造函数参数指定的类型匹配。对于数组,集合或Map实例,这不一定是问题。但是,对于需要单个值的依赖项,不会任意解决此歧义。如果没有唯一的 bean 定义可用,则引发异常。

2.autowire的四种模式

模式 解释
no (默认)无自动装配。
byName 按属性名称自动装配
byType 如果容器中恰好存在一个该属性类型的 bean,则使该属性自动装配。
constructor 类似于byType,但适用于构造函数参数。

常用的为byName和byType
通俗来说:

byName:需要保证所有bean的id唯一,并且需要和自动装配的属性的set方法的值一致。

byType:需要保证所有的bean的calss唯一,并且这个bean需要和自动装配的属性类型一致。

3.使用自动装配

3.1 使用byName自动装配

  <bean id="cat" class="com.tang.pojo.Cat"/><!-- 注意此时的id不一样 --><bean id="dog22222" class="com.tang.pojo.Dog"/><!--    自动装配--><bean id="people" class="com.tang.pojo.People" autowire="byName"><property name="name" value="一个人" /></bean>

注意:
byName会在上下文中查找和自己对象set后面的方法一致的beanid,如果不一致,就会报空指针异常

3.2 使用byType自动装配

<bean id="cat" class="com.tang.pojo.Cat"/><bean id="dog22222" class="com.tang.pojo.Dog"/><!--    自动装配--><bean id="people" class="com.tang.pojo.People" autowire="byType"><property name="name" value="一个人" /></bean>

注意:
byType会在上下文中查找和自己对象属性类型相同的bean

资源类和配置文件

实体类:

public class Cat {public void shout(){System.out.println("喵喵~");}
}
public class Dog {public void shout(){System.out.println("汪汪~");}
}
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;}@Overridepublic String toString() {return "People{" +"cat=" + cat +", dog=" + dog +", name='" + name + '\'' +'}';}
}

beans.xml:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="cat" class="com.tang.pojo.Cat"/><bean id="dog22222" class="com.tang.pojo.Dog"/><!--    自动装配--><bean id="people" class="com.tang.pojo.People" autowire="byType"><property name="name" value="一个人" /></bean></beans>

测试类:

public class MyTest {@Testpublic void test01(){ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");People people = context.getBean("people", People.class);people.getCat().shout();people.getDog().shout();}
}

Spring自动装配-autowire相关推荐

  1. Spring自动装配(autowire)篇

    什么是自动装配 自动装配帮我们省去了 property标签配置操作,Spring会自动根据 属性名称,类型,构造器来进行自动注入. 例如不进行自动装配配置如下: <bean id="u ...

  2. Spring自动装配 autowire

    什么是自动装配? 自动装配就是让应用程序上下文为你找出依赖项的过程.说的通俗一点,就是Spring会在上下文中自动查找,并自动给bean装配与其关联的属性! spring中实现自动装配的方式有两种,一 ...

  3. Spring 自动装配 ‘byType’

    转载自   Spring 自动装配 'byType' Spring 自动装配 'byType' 这种模式由属性类型指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans ...

  4. Spring 自动装配 ‘byName’

    转载自  Spring 自动装配 'byName' Spring 自动装配 'byName' 这种模式由属性名称指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans 的 ...

  5. spring自动装配依赖包_解决Spring自动装配中的循环依赖

    spring自动装配依赖包 我认为这篇文章是在企业应用程序开发中使用Spring的最佳实践. 使用Spring编写企业Web应用程序时,服务层中的服务量可能会增加. 服务层中的每个服务可能会消耗其他服 ...

  6. spring自动装配、注解

    spring自动装配 Spring 自动装配 byName 这种模式由属性名称指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans 的 auto-wire 属性设置为 ...

  7. 一步一步手绘Spring DI运行时序图(Spring 自动装配之依赖注入)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  8. Spring自动装配及自动注入

    一. 自动装配 autowire 1.byType,按照类型自动装配,注意点,使用类型自动装配,在IOC容器中相同类型的bean只能有一个 2.byName,按照名称自动装配.bean的id和需要装配 ...

  9. (二)Spring自动装配

    Spring自动装配 为了减少XML的配置数量.Spring提供了几种技巧来解决这一问题: 自动装配(autowiring): 有助于减少<property>元素和<constroc ...

最新文章

  1. 数据结构学习工具总结
  2. 初学Java-循环输入直到文件结束
  3. openssl / vs2019 编译 openssl 1.0.2u 过程说明
  4. java notify视频_一个很好的小例子来演示java中的wait()和notify()方法
  5. html5游戏面试题及答案,HTML5常见面试题及答案(二)
  6. HIDL第一个Hello World
  7. UIView你知道多少
  8. 计算机博弈点格棋规则,点格棋博弈中UCT算法的研究与实现
  9. 用html标记语言编写一个简单的网页代码,一个简单的网页设计代码
  10. win10安装MinGW
  11. JavaScript节点操作、删除节点
  12. 政务云迁移服务项目预算制定
  13. Unreal Engine 4 Radiant UI 入门教程(一)制作Radiant HUD
  14. 视觉感知特性 【1】人类视觉系统的信息处理机制的4个特性
  15. 一款免费的屏幕录制软件
  16. 关于android4.4沉浸模式的进入和退出时系统栏状态栏遮盖问题,【Android学习】关于Android4.4沉浸模式的进入和退出时系统栏状态栏遮盖问题...
  17. python 图片正方形化
  18. Linux_ubuntu
  19. Spring项目,项目启动执行方法且执行一次。
  20. flutter pod install报错:[BUG] Bus Error at 0x00000001001b8000 ruby 2.6.3p62 (2019-04-16 revision 67580

热门文章

  1. Python全栈开发(一)——环境搭建和入门
  2. SQL查询出距当前时间最近的一条或多条记录。
  3. Java简单实现DES加密解密算法
  4. ACM数学模板1 高斯消元 Gaussian Elimination
  5. 什么是mysql时间戳_mysql时间戳格式是什么类型
  6. 面试官发难,如何用 SQL 来查询 Elasticsearch 中的数据?
  7. 解决free():invalid pointer:0x00000000000000155455 ****的问题。
  8. 计算机故障排除ppt,在 PowerPoint 中对损坏的演示文稿进行故障排除 | Microsoft Docs...
  9. Activity的四种启动模式应用场景
  10. Activity的四种启动方式