在构造函数上注入java.util.Random

时间:2013-03-28 17:44:52

标签: java spring code-injection

我有一个带有这个构造函数的HiddenNumber类:

public HiddenNumber(java.util.Random random, int maxNumberOfDigits) {
  /* some code */
}

我正在尝试将DI的注释用作:

@Autowired
public HiddenNumber(@Value("T(java.util.Random") random, 
    @Value("4")int maxNumberOfDigits) {
  /* some code */
}

但它不起作用。我也尝试过:

@Autowired
public HiddenNumber(@Value("#{T(java.util.Random}") random, 
    @Value("4")int maxNumberOfDigits) {
  /* some code */
}

如果我这样做:

@Autowired
public HiddenNumber(Random random, @Value("4") int maxNumberOfDigits) {
  /* some code */
}

在app-context.xml中执行:

<bean class="java.util.Random" />

一切正常。但我当然更喜欢只做注释。

注入java.util.Random的正确方法是什么?

感谢。

3 个答案:

答案 0 :(得分:3)

你可以这样做:

@Autowired
public HiddenNumber(@Value("#{new java.util.Random()}") Random random, @Value("4")int maxNumberOfDigits) {
...
}

答案 1 :(得分:0)

您也可以使用Spring的<constructor-arg>元素。例如,请参阅Populating a spring bean using a constructor-arg fieldthis here

答案 2 :(得分:0)

我需要这个非常简单的程序,并且我使用SpEL解决了。

要使用p:前缀,必须在beans标记中包含此属性:     的xmlns:P = “http://www.springframework.org/schema/p”