有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

自动连线的java异常

在autowiring byType中,如果属性类型与多个bean匹配,那么它将抛出异常,但是当我使用注释@Autowired并定义了两个具有相同属性类型的bean时,我看不到任何异常。 代码如下: 受雇者爪哇:

public class Employee {
    private int id;
    private String name;
    private int salary;

    // Getter and Setter
}

部门:

public class Dept {
    @Autowired
    private Employee emp;

    public Employee getEmp() {
        return emp;
    }
    public void setEmp(Employee emp) {
        this.emp = emp;
    }
    @Override
    public String toString() {
        return emp.getName();
    }
}

豆子。xml:

<bean id = "dept" class = "Dept"></bean>

    <bean id = "emp" class = "Employee">
    <property name="id" value="25"></property>
    <property name="name" value="Ram"></property>
    <property name="salary" value="32000"></property>
    </bean>

    <bean id = "emp1" class = "Employee">
    <property name="id" value="25"></property>
    <property name="name" value="Sanju"></property>
    <property name="salary" value="32000"></property>
</bean>

阿普曼。爪哇:

public class AppMain {

        public static void main(String[] args) {
            ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
            Dept d = (Dept)context.getBean("dept");
            System.out.println(d);
        }
    }

如果我做错了什么,请纠正我


共 (2) 个答案

  1. # 1 楼答案

    您已经在Employee类中定义了一个名为“emp”的变量,该变量与id为“emp”的bean相同。因为今年春天,不要搞不清楚该注入哪个bean。如果您将bean id从“emp”更改为其他内容,您将得到一个不满意的bean依赖异常。阅读更多here

  2. # 2 楼答案

    Spring正在匹配emp变量名;如果你的bean是emp1emp2,你会得到一个异常(除非你在@AutoWired字段中添加一个@Qualifier