Dan*_*ick 5 java spring spring-mvc
我刚刚学习了Spring Framework,并一直在使用Spring 2.5进行学习。我用这些类创建了三个bean
Food.java
package com.spring.danipetrick;
public interface Food {
void ingredients();
}
Run Code Online (Sandbox Code Playgroud)
NasiGoreng.java
package com.spring.danipetrick;
public class NasiGoreng implements Food {
public NasiGoreng() {
}
public void ingredients() {
System.out.println("Rice, Coconut oil, Egg, Crackers");
}
@Override
public String toString() {
return "Nasi Goreng";
}
}
Run Code Online (Sandbox Code Playgroud)
Rendang.java
package com.spring.danipetrick;
public class Rendang implements Food {
public void ingredients() {
System.out.println("Beef, Coconut milk, spices");
}
@Override
public String toString() {
return "Rendang";
}
}
Run Code Online (Sandbox Code Playgroud)
PecintaKuliner.java
package com.spring.danipetrick;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class PecintaKuliner {
@Autowired
@Qualifier("nasigoreng")
private Food food;
@Autowired
public void setFood(Food food) {
this.food = food;
}
public Food getFood() {
return this.food;
}
public void sayMaknyus() {
System.out.println(food.toString() + " memang maknyus...");
}
}
Run Code Online (Sandbox Code Playgroud)
XML配置,qualifier-test.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config />
<bean id="bondan" class="com.spring.danipetrick.PecintaKuliner">
</bean>
<bean id="rendang" class="com.spring.danipetrick.Rendang"/>
<bean id="nasigoreng" class="com.spring.danipetrick.NasiGoreng" />
</beans>
Run Code Online (Sandbox Code Playgroud)
最后,具有main方法的类是QualifierTestMain.java:
package com.spring.danipetrick;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class QualifierTestMain {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("/qualifier-test.xml");
PencintaKuliner bondan = (PencintaKuliner)context.getBean("bondan");
bondan.sayMaknyus();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行该项目时,出现这样的错误
由以下原因引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义[com.spring.danipetrick.Food]类型的唯一bean:期望的单个匹配bean,但找到了2:[rendang,nasigoreng]
为什么@Qualifier注释在我的情况下不起作用?
方法和字段都用注释@Autowired。因此,Spring将尝试同时注入两者。在一次运行中,它将尝试注入
@Autowired
@Qualifier("nasigoreng")
private Food food;
Run Code Online (Sandbox Code Playgroud)
这将起作用,因为注射目标合格。
但是方法
@Autowired
public void setFood(Food food) {
this.food = food;
}
Run Code Online (Sandbox Code Playgroud)
不符合注入参数的条件,因此Spring不知道要注入哪个bean。
将以上更改为
@Autowired
public void setFood(@Qualifier("nasigoreng") Food food) {
this.food = food;
}
Run Code Online (Sandbox Code Playgroud)
但是您应该决定是现场注入还是二传手注入中的一种,否则是多余的,可能会导致错误。
尝试仅从@AutowiredinsetFood()中删除PecintaKuliner
喜欢
@Autowired
@Qualifier("nasigoreng")
private Food food;
public void setFood(Food food) {
this.food = food;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14097 次 |
| 最近记录: |