Spring 使用“自动连线”;byName“;忽略autowire候选=错误配置

Spring 使用“自动连线”;byName“;忽略autowire候选=错误配置,spring,dependency-injection,autowired,Spring,Dependency Injection,Autowired,根据Spring框架参考文档的定义,当bean的XML定义中将autowire-candidate设置为false时,它会将bean从自动布线基础结构中排除。本节未讨论此案例的任何例外情况 当autowire被设置为byType时,此功能起作用。但是当它被设置为byName时,autowire-candidate=“false”配置被忽略,bean仍然是自动连接的 我的问题是: 这是否是设计而非文件化的(或) 这是一个错误(或错误) 我的配置中是否缺少某些内容 以下是相关源列表: Movie

根据Spring框架参考文档的定义,当bean的XML定义中将
autowire-candidate
设置为
false
时,它会将bean从自动布线基础结构中排除。本节未讨论此案例的任何例外情况

autowire
被设置为
byType
时,此功能起作用。但是当它被设置为
byName
时,
autowire-candidate=“false”
配置被忽略,bean仍然是自动连接的

我的问题是:

  • 这是否是设计而非文件化的(或)
  • 这是一个错误(或错误)
  • 我的配置中是否缺少某些内容
以下是相关源列表:

MovieDataStore.java

public class MovieDataStore {
    // Just some dummy class
}
public class MovieDao {
    private MovieDataStore movieDataStore;

    public MovieDataStore getMovieDataStore() {
        return movieDataStore;
    }

    public void setMovieDataStore(MovieDataStore movieDataStore) {
        this.movieDataStore = movieDataStore;
    }
}
MovieDao.java

public class MovieDataStore {
    // Just some dummy class
}
public class MovieDao {
    private MovieDataStore movieDataStore;

    public MovieDataStore getMovieDataStore() {
        return movieDataStore;
    }

    public void setMovieDataStore(MovieDataStore movieDataStore) {
        this.movieDataStore = movieDataStore;
    }
}
spring-context.xml片段

<bean id="movieDao" class="com.example.spring.MovieDao" autowire="byName"/>

<bean id="movieDataStore" class="com.example.spring.MovieDataStore" 
        autowire-candidate="false"/>
我希望它打印
null
,因为我请求自动连线的唯一依赖项实际上被排除在自动连线之外。但是,上面的测试代码打印了以下内容:

com.example.spring.MovieDataStore@22915056
请注意,这仅在autowire
byName
的情况下发生。如果我按类型自动连线
byType
,它会按预期打印
null

我使用的是Spring框架版本4.3.5.RELEASE和Java 7。

根据我提出的,它是经过设计的,没有文档记录

Juergen Hoeller对门票的评论:

这是一个旧的设计决策,其中autowire candidate=“false”仅影响基于类型的自动关联尝试,而不影响按名称直接引用。。。也不是autowire=“byName”。虽然后者可能有争议,但我现在不打算更改它,因为autowire=“byName”一开始是一种过时的机制。因此,我将把这变成一个文档问题