【问题标题】:How to pass class constructor parameters in Spring bean Autowired by annotations如何在Spring bean中传递类构造函数参数由注释自动装配
【发布时间】:2015-02-20 00:19:24
【问题描述】:

没有 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
    .
    .
    .
}

【问题讨论】:

标签: java spring


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    public User(  @Value("Ganesh") String names,               
    @Value("27")  int age) {
    names=names;
    this.age=age;
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多