繁体   English   中英

带有构造函数参数的 Autowire Bean

[英]Autowire Bean with constructor parameters

我有一个带有构造函数参数的 bean,我想使用注释将其自动装配到另一个 bean 中。 如果我在主配置中定义 bean 并在那里传递构造函数参数,那么它工作正常。 但是,我没有主配置,而是使用@Component@ComponentScan来注册 bean。 我试过使用@Value属性来定义参数,但后来出现异常No default constructor found;

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

Bean的构造函数需要使用@Autowired@Inject进行注释,否则 Spring 将尝试使用默认构造函数构造它,而您没有其中之一。

@Autowired文档说它用于将构造函数、字段、setter 方法或配置方法标记为由 Spring 的依赖注入设施自动装配。 在这种情况下,您需要告诉 Spring 用于自动装配依赖项的适当构造函数不是默认构造函数。 在这种情况下,您要求 Spring 创建SecondBean实例,为此它需要创建一个Bean实例。 在没有带注释的构造函数的情况下,Spring 将尝试使用默认构造函数。

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM