如何在Spring bean中传递类构造函数参数由注释自动装配

时间:2014-12-21 20:37:08

标签: java spring

没有IOC容器的正常方法是:

new User("Names", 22);

此处的参数值是动态的,例如,它们是通过用户提交表单提取的,因此无法存储在文件中。

TextField userNames = new TextField();

names = userNames.getText()

其他参数相同。

其中:

@Component
public class User {
    public User(String names, int age) {
        .
        .
        .
    }
}

如何在将用户User传递到另一个类的构造函数的参数时初始化Autowired

@Component
public class AnotherClass {
    @Autowired
    User user(....)????? // How do I do it here
    .
    .
    .
}

2 个答案:

答案 0 :(得分:4)

我怀疑这是你真正想做的事情。我的猜测是User是某种模型对象,不应该被Spring的依赖注入处理。

依赖注入(非常详细解释here)通常在启动容器时创建并连接bean,或者在执行请求时创建Spring MVC。因此,必须在创建User实例之前创建AnotherClass对象。

如果这是使用Spring MVC的请求的一部分,则@ModelAttribute以及@RequestParam@PathVariable可能是您的朋友。有关这方面的一些很好的文档,请查看Spring docs

答案 1 :(得分:2)

public User(  @Value("Ganesh") String names,               
@Value("27")  int age) {
names=names;
this.age=age;
}

除了@value之外,在XML中使用索引还具有灵活性,如果index = 0,比如使用两次,则后面的值用于覆盖旧值。 类似地,可以在重载和参数化构造函数的情况下指定类型,并且IOC自己选择适当的构造函数。如果未提供type或index,则会考虑构造函数args的默认顺序,如果参数化的cons不匹配,则会发生异常。 假设使用了setter并且在bean标记内部,为同一个名称提供了两个属性标记,在这种情况下,抛出异常而不是覆盖该值。在setter中,不允许使用两个参数。