我有一个带有构造函数参数的 bean,我想使用注释将其自动装配到另一个 bean 中。如果我在主配置中定义 bean 并在那里传递构造函数参数,那么它工作正常。但是,我没有主要配置,而是使用@Componentwith@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();
}
}
Run Code Online (Sandbox Code Playgroud)
for 的构造函数Bean需要用@Autowiredor注释@Inject,否则 Spring 将尝试使用默认构造函数构造它,而您没有其中之一。
该文档的@Autowired说,它是用来标记一个构造函数,字段setter方法或配置方法,由Spring的依赖注入设施被装配。在这种情况下,您需要告诉 Spring 用于自动装配依赖项的适当构造函数不是默认构造函数。在这种情况下,您要求 Spring 创建SecondBean实例,为此它需要创建一个Bean实例。在没有带注释的构造函数的情况下,Spring 将尝试使用默认构造函数。
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html
| 归档时间: |
|
| 查看次数: |
17925 次 |
| 最近记录: |