Spring使用构造函数自动装配

时间:2016-08-13 09:51:53

标签: spring autowired

我想使用少量属性创建一个对象,如何使用Spring @Autowired实现这一目标? 例如 -

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

}

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

阿图尔

1 个答案:

答案 0 :(得分:3)

你真的想要自动装配变量吗?或者你想在获取bean时明确地设置它们吗?

在后一种情况下,您可以简单地拨打ApplicationContext.getBean(Class<T> clz, Object ... arguments),在您的情况下......

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

显然,这与@Autowired没有任何关系。或者您想要将一些字符串自动装入其中?在这种情况下,您通常会使用@Value注释。自动装配用于注入 bean ,您可以通过现场注入...

@Autowired
private MyService service;

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

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

...通过二传手注射...

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

但通常你只会以这种方式自动装配 bean 。字符串不是bean,因此您必须使用@Value ...

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

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