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

在构造函数上注入java.util.Random,java,spring,code-injection,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

我有一个具有此构造函数的类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的正确方法是什么

谢谢。

您可以这样做:

@Autowired
public HiddenNumber(@Value("#{new java.util.Random()}") Random random, @Value("4")int maxNumberOfDigits) {
...
}
您可以这样做:

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

您也可以使用Spring的元素。例如,参见或

您也可以使用Spring元素。例如,参见或

对于一个非常简单的程序,我需要这个,我使用SpEL解决了这个问题

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


对于一个非常简单的程序,我需要这个,我使用SpEL解决了这个问题

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


你不能注射你没有豆子的东西。如果您喜欢注释,只需创建一个基于java的配置。您不能注入没有bean的东西。如果您更喜欢注释,只需创建一个基于java的配置。@Autowired仍然是必需的吗?是的,假设在HiddenNumber Bean上有一个原型注释:@Service public class HiddenNumber{在这种情况下,我不明白@Service与@Autowired有什么关系。对不起,你是对的,@Service不是必需的。我假设bean是用构造型注释实例化的。不需要,它也可以用普通的xml bean定义实例化。如果你用构造函数中的表达式来新建它,会怎么样如果没有在其他地方配置它,那么首先注入它的理由是什么?是否仍然需要@Autowired?是的,假设HiddenNumber Bean上有一个原型注释:@Service public class HiddenNumber{在这种情况下,我不明白@Service与@Autowired有什么关系。对不起,你是对的,@Service不是必需的。我假设bean是用构造型注释实例化的。不需要,它也可以用普通的xml bean定义实例化。如果你用构造函数中的表达式来新建它,会怎么样如果没有在其他地方配置它,那么首先注入它的理由是什么?