作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Person.java
@Controller
public class Person
{
@Autowired
private Ability ability;
public void printMessage(){
ability.printMessasge();
}
public void setOutputGenerator( Ability ability) {
this.ability = ability;
}
}
能力.java
@Controller
public class Ability
{
void printMessasge(){
System.out.println("I print message");
}
}
Spring .xml
<bean id="invisible" class="com.mkyong.common.Ability" >
</bean>
<context:component-scan base-package="com.mkyong" />
应用程序.java
public class App {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"spring.xml");
Person person = (Person) context.getBean("person");
person.printMessage( );
}
在上面的例子中我定义了两个bean Ability
第一类使用@Controller
和一个 xml
文件。根据Autowire
按类型我应该得到
Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException:
...
No unique bean of type [com.mkyong.common.Ability] is defined:
但我得到了正确的输出。为什么?
如果我创建一个由 Ability 类实现的接口(interface),那么我将得到 UnsatisfiedDependencyException 异常。像这样:
父类.java
public interface Parent{
public void printMessasge();
}
能力.java
@Controller
public class Ability implements Parent
{
void printMessasge(){
System.out.println("I print message");
}
Person.java
@Controller
public class Person
{
@Autowired
Parent parent;
public void printMessage(){
parent.printMessasge();
}
public void setOutputGenerator( Parent parent) {
this.parent= parent;
}
}
最佳答案
默认情况下 Spring 确实按类型匹配,但在有多个匹配 bean 的情况下,它会退回到按名称匹配。引用 ( 6.9.4 Fine-tuning annotation-based autowiring with qualifiers) 说:
For a fallback match, the bean name is considered a default qualifier value.
使用 @Qualifier
注释使按类型 Autowiring 以及按名称进行的 Autowiring 更加明确。
关于java - 为什么我在 Spring 的 Autowiring 中没有得到 No unique bean of type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34508008/
我是一名优秀的程序员,十分优秀!