Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @自动连线查找不明确的依赖项,并且仍然有效。怎样_Java_Spring_Annotations_Spring Annotations - Fatal编程技术网

Java @自动连线查找不明确的依赖项,并且仍然有效。怎样

Java @自动连线查找不明确的依赖项,并且仍然有效。怎样,java,spring,annotations,spring-annotations,Java,Spring,Annotations,Spring Annotations,为什么Spring没有抛出NoSuchBeanDefinitionException,其中存在不明确的依赖项,并且使用@Autowired注释找到了多个用于自动连接的bean候选项 我有一个简单的beans.xml,它有两个相同的bean,它们具有不同的idcategory和category1,并且出于某种原因 选择类别bean进行自动关联。我的印象是,@Autowired注释在内部使用byType自动连接 由于这里有多个匹配项,Spring将抛出NoSuchBeanDefinitionExce

为什么Spring没有抛出
NoSuchBeanDefinitionException
,其中存在不明确的依赖项,并且使用
@Autowired
注释找到了多个用于自动连接的bean候选项

我有一个简单的beans.xml,它有两个相同的bean,它们具有不同的id
category
category1
,并且出于某种原因 选择
类别
bean进行自动关联。我的印象是,
@Autowired
注释在内部使用
byType
自动连接 由于这里有多个匹配项,Spring将抛出
NoSuchBeanDefinitionException
exception

我使用的是spring版本
3.2.13。请在此处发布

beans.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans 
     .....   ">

        <context:annotation-config />

        <bean id="product" class="com.study.spring.Product">
            <property name="id" value="101"/>
            <property name="name" value="Apple iPhone"/>
            <property name="active" value="true"/>
        </bean>

        <bean id="category1" class="com.study.spring.Category">
            <property name="id" value="202"/>
            <property name="name" value="Phone"/>
            <property name="active" value="true"/>
        </bean>

        <bean id="category" class="com.study.spring.Category">
            <property name="id" value="201"/>
            <property name="name" value="Communications"/>
            <property name="active" value="true"/>
        </bean>

    </beans>

它接受id为
Category
Category
对象,因为它与字段的名称匹配。旧的解释是:

对于回退匹配,bean名称被视为默认限定符值

政府对此的解释更清楚一些。这里有一个“按名称”自动布线的情况:

按属性名称自动关联。Spring查找与需要自动连接的属性同名的bean。例如,如果一个bean定义按名称设置为autowire,并且它包含一个master属性(即,它有一个setMaster(..)方法),Spring将查找一个名为master的bean定义,并使用它来设置属性


它接受id为
Category
Category
对象,因为它与字段的名称匹配。旧的解释是:

对于回退匹配,bean名称被视为默认限定符值

政府对此的解释更清楚一些。这里有一个“按名称”自动布线的情况:

按属性名称自动关联。Spring查找与需要自动连接的属性同名的bean。例如,如果一个bean定义按名称设置为autowire,并且它包含一个master属性(即,它有一个setMaster(..)方法),Spring将查找一个名为master的bean定义,并使用它来设置属性


我在读《行动中的春天》第三版,这是一本让我困惑的书的摘录。限定模棱两可的依赖关系——另一方面,问题可能不是缺少可供Spring autowiring选择的bean,而是有大量(或至少两个)bean,每个bean都同样有资格连接到属性中。例如,假设您有两个bean实现该工具。在这种情况下,@Autowired无法选择您真正想要的。因此,与猜测相反,将抛出NoSuchBeanDefinitionException,并且连线将失败。现在更清楚了吗?您是否尝试将字段重命名为除
类别
以外的其他名称,然后查看发生了什么?是的,我理解。我将
category
重命名为
category1
,导致异常
NoSuchBeanDefinitionException
。因此,在出现歧义的情况下,Spring有一个回退机制来解决bean歧义
byName
autowiring特性,否则
byType
是默认的。我正在阅读Spring in Action-3rd Edition,这是一本让我困惑的书的摘录。限定模棱两可的依赖关系——另一方面,问题可能不是缺少可供Spring autowiring选择的bean,而是有大量(或至少两个)bean,每个bean都同样有资格连接到属性中。例如,假设您有两个bean实现该工具。在这种情况下,@Autowired无法选择您真正想要的。因此,与猜测相反,将抛出NoSuchBeanDefinitionException,并且连线将失败。现在更清楚了吗?您是否尝试将字段重命名为除
类别
以外的其他名称,然后查看发生了什么?是的,我理解。我将
category
重命名为
category1
,导致异常
NoSuchBeanDefinitionException
。因此,在出现歧义的情况下,Spring有一个回退机制来解决bean歧义
byName
autowiring特性,否则默认为
byType
package com.study.spring;

import org.springframework.beans.factory.annotation.Autowired;

public class Product {
    private int id;
    private String name;
    private boolean active;
    @Autowired
    private Category category;

    //getters and setters here
}