【问题标题】:Exception with Autowired自动连线例外
【发布时间】:2017-04-27 15:09:49
【问题描述】:

在自动装配 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);
        }
    }

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

【问题讨论】:

    标签: java spring spring-integration autowired


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    您已经定义了一个名为“emp”的变量,该变量是 Employee 类的它与 id 为“emp”的 bean 相同。因为这个 spring 不要混淆它有哪个 bean注入。如果您将 bean id 从“emp”更改为其他内容,您将得到一个不满足的 bean 依赖异常。阅读更多here

    【讨论】:

    • 是的,需要将 bean id 从 emp 更改为其他名称以获取异常。
    猜你喜欢
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2015-08-05
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多