2014-09-14 2 views
2

У меня есть бит, как определено ниже, в котором я хочу автоподключиться к классу, который определен как компонент в контекстном файле Spring. Но его не работает. Как ни странно, другие типы объектов объекта, которые были созданы в одном классе, были правильно настроены. Bean до Autowire, как показано ниже: -Невозможно Autowire bean типа String

<bean id="stringToAutowire" class="java.lang.String"> 
     <constructor-arg value="true" /> 
    </bean> 

класса, где его быть Autowired является: - Я пытался аннотирования его с @Component .Но нет успеха.

public class AService { 
    @Autowired 
    private BDao bDao; 

    @Autowired 
    private String stringToAutowire; 
    ........ 
} 

файл контекста как: -

<context:annotation-config/> 
<context:component-scan base-package ="PKG "/> 
<bean id="aService" class="AService"/> 
<bean id="bDao" class="BDao"/> 
<bean id="stringToAutowire" class="java.lang.String"> 
    <constructor-arg value="true" /> 
</bean> 
+0

Можете ли вы показать код, который использует компонент? – geoand

+0

@ xio4: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#String%28java.lang.String%29 –

+0

Если поле «stringToAutowire» также «bDao» должно Не работай. Я пробовал вашу конфигурацию и прекрасно работал. Я думаю, что вы создали AService с помощью нового оператора, если это так, это нормальное поведение. См. Это [ссылка] (http://stackoverflow.com/a/25284129/3364187) – Xstian

ответ

0

попробуйте использовать ниже:

@Autowired 
@Qualifier("stringToAutowire") 
private String someString; 
+0

не решает проблему. – user3504187

+0

У вас есть @Component аннотация для вашего класса AService ?? было бы лучше, если бы вы могли поделиться немного больше кода ... –

2

В весеннем документации:

Этот текст «Вы не можете автоопределять так называемые простые свойства, такие как примитивы, строки и классы (и массивы таких простых свойств). Это ограничение пошагово.

Я не нашел точной спецификации того, что происходит в этом случае. По моему опыту Autowire свойств String ненадежен. Иногда работает, иногда нет. Поэтому я рекомендую избегать autowire строковых значений .

В вашем случае, если вы используете как Autowire и конструктор-Arg. Они представляют собой отдельные механизмы. только один не требуется.

  1. Ditch Autowire для струнного.
  2. Добавьте конструктор AService, который принимает, как первый аргумент, строка для назначения «stringToAuto провод". «Constructor-arg» укажет, что передать для этого аргумента конструктора.
0

Вы не можете autowire простые свойства, такие как примитивы, строки и классы (и массивы таких простых свойств) и явные зависимости в свойствах и свойства конструктора-аргумента всегда переопределяют автоподключение.

Так капля @Повторяемая аннотация из stringToAutowire и использование с собственностью.