2013-03-28 5 views
1

У меня есть класс HiddenNumber с этим конструктором:Инъекционное java.util.Random на конструктор

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 */ 
} 

И в приложение-context.xml сделать:

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

Он работает нормально. Но, конечно, я предпочитаю делать только аннотации.

Каков правильный способ введения java.util.Random?

Спасибо.

+1

Вы не можете вводить то, для чего у вас нет компонента. Если вы предпочитаете аннотации, просто создайте конфигурацию на основе java. –

ответ

3

Вы можете сделать это:

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

Требуется ли '@ Autowired'? –

+0

Да, предположение состоит в том, что в HiddenNumber Bean существует аннотация стереотипа: '@Service public class HiddenNumber {' –

+0

Я не понимаю, что '@ Service' связано с' @ Autowired' в этой ситуации. –

0

Мне нужно было это для очень простой программы, и я решил использовать SpEL.

Для того, чтобы использовать р: префикс, который должен включать в себя это свойство в теге фасолью: Xmlns: р = "http://www.springframework.org/schema/p"

Смежные вопросы