自动装配

时间:2017-04-27 15:09:49

标签: java spring spring-integration autowired

在自动装配byType中,如果属性类型与多个bean匹配,那么它会引发异常,但是当我使用注释@Autowired并定义了两个具有相同属性类型的bean时,我看不到任何异常。 以下是代码: Employee.java:

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();
    }
}

beans.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>

AppMain.java:

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 个答案:

答案 0 :(得分:4)

Spring匹配emp变量名称;如果您的bean是emp1emp2,那么您将获得例外(除非您向@Qualifier字段添加@AutoWired)。

答案 1 :(得分:0)

你已经定义了一个名为“emp”的Employee类的变量,它与id为“emp”的bean相同。因为这个春天不要混淆了解它有哪个bean要注入。如果你将bean id从“emp”更改为其他东西,你将得到一个不满意的bean依赖异常。阅读更多here