Spring 使用构造函数自动装配

Spring autowired using constructor

我想使用一些属性创建一个对象,如何使用 Spring @Autowired 来实现? 例如-

public class Person{
private String fname;
private String lname;
public Person(String fname, String lname){
    this.fname = fname;
    this.lname = lname;
}

}

如何通过在运行时传递这些属性来使用 Person class 的 @Autowired 创建对象。

阿图尔

您真的要自动装配变量吗?还是在获取bean的时候显式设置?

在后一种情况下,您只需调用 ApplicationContext.getBean(Class<T> clz, Object ... arguments),在您的情况下...

Person person = context.getBean(Person.class, "Henry", "Miller");

显然这与 @Autowired 没有任何关系。还是您想将一些字符串自动装入其中?在那种情况下,您通常会使用 @Value 注释。 Autowired 用于注入 beans,你可以通过字段注入来完成...

@Autowired
private MyService service;

...通过构造函数注入...

@Autowired
public Person(MyService service) { ... }

...通过setter 注入...

@Autowired
public void setMyService(MyService service) {..}

但通常你只能那样自动装配 beans。字符串不是豆子,所以你必须使用 @Value...

@Autowired
public Person(@Value('${app.some.property}') final String firstName) {...}

这会将 app.some.property 的已配置 属性 注入该 bean。当然,只有当你真的想从应用程序上下文中注入一些东西时,这才有用。如果想动态创建Person,可以使用上面的方法。