Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring autowire @Component / 10 сообщений из 10, страница 1 из 1
21.06.2014, 00:07
    #38676057
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring autowire @Component
Добрый день! Возникла проблема такого рода: необходимо заавтовайрить поле в бин, определённый в xml конфиге, причём само поле представляет из себя класс аннотированный @Component. Насколько я понимаю, контекст об эти "компонентах" ничего не знает, и получить их, соответственно, никак не может.
Подскажите какое-нибудь решение окромя определения второго бина в xml, сам найти ничего не смог путнего.
...
Рейтинг: 0 / 0
21.06.2014, 01:08
    #38676081
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring autowire @Component
Вызови context.getBean("DoSOfRedRiverComponent") и мы узнаем видит ли контекст твои компоненты или нет.
...
Рейтинг: 0 / 0
21.06.2014, 01:38
    #38676090
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring autowire @Component
mayton,

Неа. Не видит. Странная фигня вообще. Вот конфиги:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd



        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">


    <context:annotation-config />

    <context:component-scan base-package="smsservice.controller, smsservice.core.process,
                                            smsservice.core.request, smsservice.core" />

	<mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper" ref="guavaObjectMapper" />
            </bean>
        </mvc:message-converters>
	</mvc:annotation-driven>

	<bean id="envPlaceholder"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:sms.properties</value>
			</list>
		</property>
		<property name="fileEncoding" value="UTF-8" />
		<property name="systemPropertiesModeName">
			<value>SYSTEM_PROPERTIES_MODE_OVERRIDE</value>
		</property>
	</bean>

    <task:scheduled-tasks>
        <task:scheduled ref="manager" method="scheduledTask" fixed-rate="10000"/>
    </task:scheduled-tasks>

</beans>



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd




        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">




    <!--<context:property-placeholder/> -->

    <!-- bean definitions here -->

    <bean name="guavaObjectMapper" class="smsservice.core.process.GuavaObjectMapper"/>

    <bean name="manager" class="smsservice.core.InternalManager">
        <constructor-arg value="val1"/>
        <constructor-arg value="val2"/>
        <constructor-arg value="val3"/>
        <constructor-arg value="val3"/>
    </bean>

</beans>



В InternalManager это так выглядит:

public class InternalManager {
@Autowired private RequestProcessor processor;

....
...
Рейтинг: 0 / 0
21.06.2014, 10:43
    #38676125
organism
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring autowire @Component
DoSOfRedRivermayton,

Неа. Не видит. Странная фигня вообще. Вот конфиги:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd



        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">


    <context:annotation-config />

    <context:component-scan base-package="smsservice.controller, smsservice.core.process,
                                            smsservice.core.request, smsservice.core" />

	<mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper" ref="guavaObjectMapper" />
            </bean>
        </mvc:message-converters>
	</mvc:annotation-driven>

	<bean id="envPlaceholder"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:sms.properties</value>
			</list>
		</property>
		<property name="fileEncoding" value="UTF-8" />
		<property name="systemPropertiesModeName">
			<value>SYSTEM_PROPERTIES_MODE_OVERRIDE</value>
		</property>
	</bean>

    <task:scheduled-tasks>
        <task:scheduled ref="manager" method="scheduledTask" fixed-rate="10000"/>
    </task:scheduled-tasks>

</beans>



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd




        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">




    <!--<context:property-placeholder/> -->

    <!-- bean definitions here -->

    <bean name="guavaObjectMapper" class="smsservice.core.process.GuavaObjectMapper"/>

    <bean name="manager" class="smsservice.core.InternalManager">
        <constructor-arg value="val1"/>
        <constructor-arg value="val2"/>
        <constructor-arg value="val3"/>
        <constructor-arg value="val3"/>
    </bean>

</beans>



В InternalManager это так выглядит:

public class InternalManager {
@Autowired private RequestProcessor processor;

....

Покажите, как вы спрингу указываете, где лежат ваши xml конфиги.
...
Рейтинг: 0 / 0
21.06.2014, 19:42
    #38676310
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring autowire @Component
organism,

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:/META-INF/app-kernel.xml</param-value>
	</context-param>

	<!-- Loads the Spring web application context -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Spring servlets -->
	<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:/META-INF/servlet.xml</param-value>
		</init-param>
		<load-on-startup>0</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>

...
Рейтинг: 0 / 0
23.06.2014, 07:19
    #38676831
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring autowire @Component
DoSOfRedRiverДобрый день! Возникла проблема такого рода: необходимо заавтовайрить поле в бин, определённый в xml конфиге, причём само поле представляет из себя класс аннотированный @Component. Насколько я понимаю, контекст об эти "компонентах" ничего не знает, и получить их, соответственно, никак не может.
Подскажите какое-нибудь решение окромя определения второго бина в xml, сам найти ничего не смог путнего.

Посмотри стектрейс.
Возможно spring не может выбрать бин.
Т.к. у вас два раза описан бин, ч/з .xml и ч/з аннотацию.

Такая проблема решается ч\з конструкцию:

@Qualifier("MyBeanID")
@Autowired
private MyBeanClass myBean;

где "MyBeanID" id бина заданый в .xml
...
Рейтинг: 0 / 0
24.06.2014, 00:04
    #38677963
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring autowire @Component
mad_nazgul,

В том то и суть, что выбрать он его может. Сам бин, в который мне нужно поле заинжектить, описан в XML, и аннотаций над собой не имеет (лишь @autowire над полем). Но, как я понял, оно заинжектится не может, потому-что описано через @Component. Как-то так. Если попытаться описать поле-бин в XML, и выбирать через @Qualifier, то это по сути разные бины будут с разным состояние. А мне надо чтоб оно всё будто-бы в одном контексте работало. Вот.
...
Рейтинг: 0 / 0
24.06.2014, 07:19
    #38678027
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring autowire @Component
DoSOfRedRivermad_nazgul,

В том то и суть, что выбрать он его может. Сам бин, в который мне нужно поле заинжектить, описан в XML, и аннотаций над собой не имеет (лишь @autowire над полем). Но, как я понял, оно заинжектится не может, потому-что описано через @Component. Как-то так. Если попытаться описать поле-бин в XML, и выбирать через @Qualifier, то это по сути разные бины будут с разным состояние. А мне надо чтоб оно всё будто-бы в одном контексте работало. Вот.

Тогда либо шашечки, либо ехать. :-)

Т.е. оставьте одно описание бина.
Либо ч/з аннотацию, либо ч/з XML.

А так у вас есть 2 одинаковых бина и Spring не знает какой вам нужен.
Вы либо говорите конкретно какой вам нужен, ч/з @Qualifier.
Либо "должен остаться только один". :-)
...
Рейтинг: 0 / 0
24.06.2014, 18:22
    #38678903
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring autowire @Component
mad_nazgul,

Дак у меня он и остался в XML. Проблема в том, что другой бин через @Component работает, потому и не инжектится.
...
Рейтинг: 0 / 0
02.07.2014, 15:08
    #38685862
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring autowire @Component
Проблему решил. Дело в том, что rootContext не может видеть бины из webContext, соответственно и заинжектить тоже.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring autowire @Component / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]