pring中autowire="byName" /"byType"

本文介绍了Spring框架中Autowire的使用方式,包括byName和byType两种类型,并通过示例展示了如何利用Autowire简化依赖注入的过程。同时也探讨了Autowire在开发阶段与生产环境的应用差异。

pring中autowire="byName" /"byType"

     如果userDAO设置了autowire="byName" ,假设ServiceImpl有一个属性名为userDAO,Spring就会在配置文件里查找有没有名字为userDAO的bean, 自动为ServiceImpl注入。
     如果bean有两个属性,一个想默认注入,一个想自定义,只要设定了autowire,然后显式的声明那个想自定义的,就可以达到要求。这就应了需求,在需要特别配置的时候就提供配置,否则给我一个默认注入。
    还可以在根部的<beans>节点写一句default-autovwrie="byName",可以让文件里的所有bean 都默认autowrie。不过有人认为开发期可以这样,但Production Server上不应该使用Autowire。但有人认为那些自定义一次的地方比如TranscationManager应该详细定义,而 Dao,Service这种大量重复定义的bean就可以这样做。

<bean id="fileUploadController" class="fileuploadfolder.FileUploadController" autowire="byName">
        <property name="methodNameResolver"><ref bean="parameterMethodNameResolver"/></property>
        <property name="showListObj" value="Listsucess"/>         
       
    </bean>

### 含义 `autowire="byName"` 是 Spring 框架中 `<bean>` 元素 `autowire` 属性的一个值,用于实现 Spring Bean 的自动装配。其含义是根据 Property 的 name 自动装配,如果一个 Bean 的 name 和另一个 Bean 中的 Property 的 name 相同,则自动装配这个 Bean 到 Property 中。需要注意的是,这里要遵循 JavaBean 的规范,即要有对应的 set 方法,并且 set 方法名也会遵循特定规则,与属性名相关[^1]。 ### 使用方法 以下是使用 `autowire="byName"` 进行自动装配的示例: ```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/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 定义一个 Bean --> <bean id="dog" class="com.example.Dog"/> <!-- 定义另一个 Bean,使用 autowire="byName" --> <bean id="person" class="com.example.Person" autowire="byName"> <!-- 这里不需要再使用 <property> 标签显式引用 dog Bean --> </bean> </beans> ``` 在上述示例中,`Person` 类中有一个 `dog` 属性,并且有对应的 `setDog` 方法。由于 `autowire="byName"`,Spring 会自动将 id 为 `dog` 的 Bean 装配到 `person` Bean 的 `dog` 属性中。以下是 `Person` 类的示例代码: ```java package com.example; public class Person { private Dog dog; public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } } ``` ### 相关知识 - **优点**:使用 `autowire="byName"` 可以简化 Spring 的配置,减少 `<property>` 标签的使用,提高开发效率。 - **缺点**:如果 Bean 的名称发生变化,可能会导致自动装配失败。因此,需要确保 Bean 的名称稳定且具有明确的含义。 - **与其他自动装配类型的比较**: - **byType**:根据 Property 的数据类型(Type)自动装配,如果一个 Bean 的数据类型兼容另一个 Bean 中 Property 的数据类型,则自动装配。与 `byName` 不同,`byType` 更关注数据类型而非 Bean 的名称。 - **constructor**:根据构造方法的参数的数据类型,进行类似于 `byType` 模式的自动装配。 - **autodetect**:如果发现默认的构造方法,则用 `constructor` 模式,否则用 `byType` 模式。 - **no**:默认情况下,不使用自动装配,Bean 依赖必须通过 `<ref>` 元素定义。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值