Beans 自动装配

简介: Beans 自动装配

Beans 自动装配

Spring 容器可以在不使用 和 元素的情况下自动装配相互协作的 bean 之间的关系。

自动装配模式

模式 描述
no 这是默认的设置,它意味着没有自动装配,你应该使用显式的bean引用来连线。你不用为了连线做特殊的事。在依赖注入章节你已经看到这个了。
byName 由属性名自动装配。Spring 容器看到在 XML 配置文件中 bean 的自动装配的属性设置为 byName。然后尝试匹配,并且将它的属性与在配置文件中被定义为相同名称的 beans 的属性进行连接。
byType 由属性数据类型自动装配。Spring 容器看到在 XML 配置文件中 bean 的自动装配的属性设置为 byType。然后如果它的类型匹配配置文件中的一个确切的 bean 名称,它将尝试匹配和连接属性的类型。如果存在不止一个这样的 bean,则一个致命的异常将会被抛出。
constructor 类似于 byType,但该类型适用于构造函数参数类型。如果在容器中没有一个构造函数参数类型的 bean,则一个致命错误将会发生。
autodetect Spring首先尝试通过 constructor 使用自动装配来连接,如果它不执行,Spring 尝试通过 byType 来自动装配。

可以使用<bean>元素的 autowire 属性为一个 bean 定义指定自动装配模式。

自动装配 byName

这种模式由属性名称指定自动装配。Spring 容器看作 beans,在 XML 配置文件中 beans 的 auto-wire 属性设置为 byName。然后,它尝试将它的属性与配置文件中定义为相同名称的 beans 进行匹配和连接。如果找到匹配项,它将注入这些 beans,否则,它将抛出异常。

例如

<!--
byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid!
-->
<bean id="people" class="com.demo.pojo.People" autowire="byName">
    <property name="name" value="测试"/>
</bean>

byname的时候,需要保证所有bean的id唯一,并且这个bean需要和注入的属性的set方法的值一致

Spring 自动装配 byType

这种模式由属性类型指定自动装配。Spring 容器看作 beans,在 XML 配置文件中 beansautowire 属性设置为 byType。然后,如果它的 type 恰好与配置文件中 beans 名称中的一个相匹配,它将尝试匹配和连接它的属性。如果找到匹配项,它将注入这些 beans,否则,它将抛出异常。

例如

​
    <!--
    byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid!
    byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean!
    -->
    <bean id="people" class=""com.demo.pojo.People" autowire="byType">
        <property name="name" value="测试"/>
    </bean>

bytype的时候,需要保证所有bean的class唯一,并且这个bean需要和注入的属性的类型一致

Spring 由构造函数自动装配

这种模式与 byType 非常相似,但它应用于构造器参数。Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 constructor。然后,它尝试把它的构造函数的参数与配置文件中 beans 名称中的一个进行匹配和连线。如果找到匹配项,它会注入这些 bean,否则,它会抛出异常。

配置注解的支持: context:annotation-config/

  • @Autowired通过byType的方式实现,而且必须要求这个对象存在!
  • @Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现!如果两个都找不到的情况下,就报错!
  • 执行顺序不同:@Autowired通过byType的方式实现 @Resource默认通过byname的方式实现
相关文章
|
6月前
|
Java Spring 容器
深入理解BeanDefinition和Spring Beans
本文深入探讨了Spring框架中的BeanDefinition和Spring Beans。BeanDefinition是Bean的元数据,包含类名、作用域、构造函数参数和属性值等信息。Spring Beans是根据BeanDefinition实例化的对象。文章详细阐述了BeanDefinition的属性,如类名、作用域(如单例和原型)及构造函数和属性值。此外,还介绍了如何使用BeanDefinition动态注册、延迟加载和实现依赖注入。通过示例代码,展示了如何创建和自定义BeanDefinition以满足特定需求。理解BeanDefinition有助于更高效地开发和维护Spring应用程序。
96 0
|
XML Java 数据格式
spring中bean的自动装配(详细)
spring中bean的自动装配(详细)
816 0
|
Java Spring 容器
什么是Spring beans?
什么是Spring beans?
64 0
|
6月前
|
XML Java 数据格式
Spring Beans的魔法门:解密多种配置方式【beans 四】
Spring Beans的魔法门:解密多种配置方式【beans 四】
99 0
|
XML Java 测试技术
Bean的自动装配
- 自动装配Spring满足bean依赖一种方式! - Spring会在上下文中自动寻找,并自动给Bean装配属性
|
XML 开发框架 Java
Spring | Bean自动装配详解
Bean自动装配详解
596 0
Spring | Bean自动装配详解
|
Java Spring
Spring Bean自动装配
1.通过ID自动装配 Spring Bean自动装配可以自动搜索beans.xml中的bean,进行自动装配,这样就可以使开发人员不必显示的声明它 例如,Person.java中包含了猫和狗的实体类对象
116 0
|
Java 开发者 Spring
@PropertySource、@ImportResource、@Bean | 学习笔记
快速学习@PropertySource、@ImportResource、@Bean
|
Java Spring
什么是Spring inner beans?
什么是Spring inner beans?
什么是Spring inner beans?
|
XML Java 数据格式
Beans 自动装配
Beans 自动装配