|
|
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
Доброго вечера. Решил сделать небольшую программку для себя. Но после разработки только веба на spring mvc, столкнулся с проблемой автоваринга сервисов в локальном приложении. Суть в том, что сервис работает изумительно при его вызове Код: java 1. 2. 3. 4. 5. 6. Но мне нужно из многих классов доставать этот сервис, не делать же холдер с сохранёнными сервисами. А вот аннотация @Autowire ничего не даёт. Вот root контекст Код: xml 1. 2. 3. и services-context.xml Код: xml 1. 2. 3. 4. Подскажите, как заставить аннотацию @Autowire работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2013, 19:18:37 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
Забыл добавить. В ходе загрузки приложения сервис инициализируется судя по логу [17:11:55] DEBUG Finished creating instance of bean 'configReader_service' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2013, 19:19:52 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
st4j, класс EmployeeBean покажите... сдается мне, что он у вас не аннотирован как бин (Component, Service, etc) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2013, 20:59:42 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
st4j, Нифига не пойму.. вы какой бин хотите заинжектить? EmployeeBean или ConfigReader? Покажите класс, где вы используете аннотацию @Autowired. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2013, 21:48:15 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
organism, прошу прощения. не то вставил в первый пост. Заинжекстить я хочу класс ConfigReader, у него есть аннотация @Service инжект в нужном классе стоит Код: java 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2013, 21:49:47 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
st4j, теперь стоит наверно убрать бин из services-context.xml, раз он у вас определён в коде.. Код: java 1. вместо конкретного типа определяют обычно интерфейс, а не конкретный тип бина, иначе смысл теряется всей концепции: т.е. вместо Код: java 1. нужно так Код: java 1. Далее зачем вы аннотацию Qualifier определили? у вас много реализаций IConfigReader и вы не можете однозначно определить какую именно заинжектить? Сомневаюсь.. по идее должно быть как-то так Код: java 1. 2. Ну и на последок, покажите все же весь класс, в котором инжектится ConfigReader... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2013, 22:14:11 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
organism, в классе ничего странного, вроде бы, нет. Аннотация на месте. Может при старте приложение что-то нужно прописать, что бы заавтоварились все компоненты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2013, 22:25:08 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
st4j, Вы не поняли.. тот класс показать, в котором у вас определено поле IConfigReader: Код: java 1. 2. AFAIK, класс, в котором определено поле помеченное, как Autowired.. должен быть сам определен как спринговый бин.. иначе спринг не сможет его найти и инициализировать как надо.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2013, 22:36:01 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
organismиначе спринг не сможет его найти и инициализировать как надо.. Эти слова сыграли роль :) Спасибо. И последний вопрос. Инициализировать нужно каждый сервис отдельно или можно как-то все сразу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2013, 22:40:10 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
st4jИнициализировать нужно каждый сервис отдельно или можно как-то все сразу? Как сразу? Обычно написали сервис, определили его как бин (аннотировали скажем как @Service)... то место где его юзаете, например, если веб-приложение, скажем, в контроллере, определяете поле, инжектите сервис.. и используете... обычно так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2013, 22:50:32 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
organism, в вебе да. Так и есть. Но сейчас мне приходится в main классе инициализировать каждый. Код: java 1. 2. 3. 4. И тогда сервисы станут доступными в других классах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2013, 22:54:15 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
Проблема вернулась с другой стороны. Я инициализирую сервис, всё нормально работает. Но стоит вызвать этот сервис из другого класса, то он возвращает NPE. Код: java 1. 2. 3. 4. 5. 6. и в самом классе Config Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. возвращает всегда NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 15:08:48 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
st4j, Вы создали новый объект. Спринг про него ничего не знает. Как он к нему вообще может обратиться, чтобы установить зависимости? Для решения этой проблемы у контекста есть методы autowire, в которые можно передать объект, созданый без участия Spring. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 15:13:30 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
А можно решить проблему посредством спринга? Ибо у меня очень много создаётся экземпляров классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 15:18:13 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
st4jА можно решить проблему посредством спринга? Ибо у меня очень много создаётся экземпляров классов. AutowireCapableBeanFactory.autowireBean() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 15:22:14 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
Как я понял, в каждом мне нужном классе нужно вызывать контекст и вызывать бин? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 15:43:50 |
|
||
|
Spring autowire на автомате
|
|||
|---|---|---|---|
|
#18+
st4jКак я понял, в каждом мне нужном классе нужно вызывать контекст и вызывать бин? Вопрос не понятен. Dependency Injection подразумевает что экземплярами управляет контейнер или отдельный модуль. А не программисте где-попало создаёт экземпляры вручную. Если вы массово везде пишете new Config(), то для чего вам вообще Spring тогда? Нужно везде Service Locator тогда использовать, а не Dependency Injection ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 15:59:03 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38459648&tid=2128211]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
225ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 268ms |
| total: | 566ms |

| 0 / 0 |
