【问题标题】:Passing argument to Autowired constructor in Spring在 Spring 中将参数传递给 Autowired 构造函数
【发布时间】:2013-06-07 15:50:14
【问题描述】:

我有一个参数化的构造函数。如何在其中使用@Autowired 注释?

下面是一个示例 sn-p:

@Autowired
private MyImplClass myImplClass;

我在MyImplClass 中有一个参数化构造函数,如下所示:

public class MyImplClass{

    WebDriver driver = new FireFoxDriver();

    public MyImplClass(WebDriver driver){
        this.driver = driver;
    }
}

我需要将驱动程序传递给MyImplClass。使用@Autowired如何实现这一点?

【问题讨论】:

  • 你可以使用@Value注解。请参阅this 问题。

标签: spring


【解决方案1】:

一种方法是在你的 spring 上下文中创建 WebDriver:

<bean class="org.openqa.selenium.firefox.FirefoxDriver"/>

并使用构造函数自动装配将其注入 MyImplClass

@Component
public class MyImplClass{

  private WebDriver driver;

  @Autowire
  public MyImplClass(WebDriver driver){
      this.driver = driver;
  }
}

【讨论】:

  • 让我更清楚一点。 “MyImplClass”在 project1 中,“MyTestClass”在 project2 中。我在“MyTestClass”中使用 @Autowired 注释。如果我在 MyImplClass 中没有参数化构造函数,那么我将按照以下方式自动装配 @Autowired public MyImplClass myImplClass。但是我有一个构造函数,它采用 WebDriver 如何在 project2 中使用 @Autowired 传递它
  • 不使用 Autowired 注释,我使用在MyTestClass in project2 中创建一个对象,如下所示。 MyImplClass myImplClass = new MyImplClass(EnumBrowsers.FIREFOX.driver()); 我怎样才能使用 Autowired 注释实现同样的效果。?
  • 当您通过自动装配注入对象时,您永远不必传递构造函数参数。这是因为 Spring 在初始化上下文时会为您执行此操作。如果您不相信这一点,请在您的类构造函数上打印一条系统输出语句。当你启动你的程序时,Spring 会自动创建一个类的实例,并传递所需的构造函数 arg
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 2023-04-04
  • 2015-10-11
  • 2013-02-20
相关资源
最近更新 更多