【问题标题】:Spring - autowire a class that have a constructor [duplicate]Spring - 自动装配具有构造函数的类[重复]
【发布时间】:2012-05-06 01:10:29
【问题描述】:

可能重复:
Anyway to @Autowire a bean that requires constructor arguments?

在我的控制器中,我想使用 @Autowired 通过方法/构造函数自动装配来注入一个类。例如使用:

@Autowired 
private InjectedClass injectedClass; 

我的问题是注入的类 injectionClass 有一个构造函数,我需要从控制器向构造函数传递一个变量。如何将值传递给构造函数?

【问题讨论】:

  • 蒂姆,我不认为这是一个重复的问题

标签: java spring autowired


【解决方案1】:

如果您使用注解,您可以将@Autowired 注解应用到 MyClass 的构造函数,这将自动连接您传递给 MyClass 的特殊构造函数的 bean。考虑遵循例如

public class MovieRecommender {

  @Autowired
  private MovieCatalog movieCatalog;

  private CustomerPreferenceDao customerPreferenceDao;

  @Autowired
  public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
      this.customerPreferenceDao = customerPreferenceDao;
  }

  // ...
}

【讨论】:

  • 你错过了解我,我需要一个 CustomerPreferenceDao 的动态构造函数
  • @webmobileDev - 你没有在问题的任何地方提到这一点......
【解决方案2】:

您可以使用 @Resource(name = "x") 注释标记私有数据成员,也可以在应用程序上下文 XML 中使用构造函数注入来连接它们。

注解和 XML 配置可以在 Spring 中混合使用。它不必是全部或全部。

<bean id="myClass" class="foo.bar.MyClass">
    <constructor-arg ref="yourArgRefHere"/> 
</bean>

【讨论】:

  • 但是 yourArgRefHere 是一些动态的东西,我需要通过代码发送
  • 如果没有更多上下文,很难说清楚。也许它不应该在 Spring 的控制之下;也许您需要一个由 Spring 管理的工厂,您只需在其中传递密钥。我不知道。
猜你喜欢
  • 1970-01-01
  • 2016-05-02
  • 2017-03-09
  • 2013-06-23
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
相关资源
最近更新 更多