使用构造函数参数自动装配Bean

时间:2016-03-05 22:45:08

标签: java spring

我有一个带有构造函数参数的bean,我希望使用注释自动装入另一个bean。如果我在主配置中定义bean并传入构造函数参数,那么它工作正常。但是,我没有主配置,但使用@Component和@ComponentScan来注册bean。我尝试使用@Value属性来定义参数,但我得到了异常

找不到默认构造函数;

@Component
public class Bean {

    private String a;
    private String b;

    public Bean(@Value("a") String a, @Value("b") String b)
    {
        this.a = a;
        this.b = b;
    }

    public void print()
    {
        System.out.println("printing");
    }

}


@Component
public class SecondBean {

    private Bean bean;

    @Autowired
    public SecondBean(Bean bean)
    {
        this.bean = bean;
    }

    public void callPrint()
    {
        bean.print();
    }

}

1 个答案:

答案 0 :(得分:4)

Bean的构造函数需要使用@Autowired@Inject进行注释,否则Spring会尝试使用默认构造函数构造它,而您不会使用其中一个构造函数

@Autowired的{​​{3}}表示它用于将构造函数,字段,setter方法或配置方法标记为由Spring的依赖注入工具自动装配。在这种情况下,您需要告诉Spring,用于自动装配依赖项的相应构造函数不是默认构造函数。在这种情况下,您要求Spring创建SecondBean实例,为此,需要创建一个Bean实例。在没有带注释的构造函数的情况下,Spring将尝试使用默认构造函数。

documentation