根据Spring Framework Reference文档的this section,当bean {1}}在bean的XML定义中设置为autowire-candidate
时,它会从自动装配基础结构中排除bean。该部分没有讨论此案例的任何例外情况。
当false
设置为autowire
时,此方法有效。但是当它设置为byType
时,byName
配置将被忽略,并且bean仍然是自动装配的。
我的问题是:
以下是相关来源列表的列表:
MovieDataStore.java
autowire-candidate="false"
MovieDao.java
public class MovieDataStore {
// Just some dummy class
}
spring-context.xml片段
public class MovieDao {
private MovieDataStore movieDataStore;
public MovieDataStore getMovieDataStore() {
return movieDataStore;
}
public void setMovieDataStore(MovieDataStore movieDataStore) {
this.movieDataStore = movieDataStore;
}
}
测试代码
<bean id="movieDao" class="com.example.spring.MovieDao" autowire="byName"/>
<bean id="movieDataStore" class="com.example.spring.MovieDataStore"
autowire-candidate="false"/>
我希望它打印ClassPathXmlApplicationContext ctx;
ctx = new ClassPathXmlApplicationContext("spring-context.xml");
MovieDao movieDao = ctx.getBean("movieDao", MovieDao.class);
System.out.println(movieDao.getMovieDataStore());
ctx.close();
,因为我要求自动装配的唯一依赖实际上是从自动装配中排除的。但是,上面的测试代码打印出来:
null
请注意,仅在autowire com.example.spring.MovieDataStore@22915056
的情况下才会发生这种情况。如果我自动装配byName
,则会按预期打印byType
。
我使用的是Spring Framework 4.3.5.RELEASE和Java 7。
答案 0 :(得分:0)
根据我提出的this Spring JIRA ticket,它是设计的,没有记录。
Juergen Hoeller对票的评论:
这是一个旧的设计决策,其中autowire-candidate =“false”仅影响基于类型的自动装配尝试,而不影响名称的直接引用...而不是autowire =“byName”。虽然后者可能有争议,但我不打算在此时改变它,因为autowire =“byName”是一个过时的机制。因此,我将此转变为文档问题。