powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Vaadin 7 and Spring injection - не работает 100%
16 сообщений из 16, страница 1 из 1
Vaadin 7 and Spring injection - не работает 100%
    #38716081
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, я интегрировал Spring and Vaadin 7, но @Inject у меня работает только в главном классе AdminPanelMain


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@PreserveOnRefresh
@Slf4j
public class AdminPanelMain extends UI {

    @Inject //It works
    private UserService userService;

    private static final long serialVersionUID = 1L;

//  @Inject
    private Panel tagsPanel = new TagsPanel();





UserService Service - просто тестовый класс.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Service
@Slf4j
public class UserService {

//  @Autowired
//  private UserRepository userRepository;

    public void saveUser() {

//      log.info("count: {}", userRepository.count());
        log.warn("saved");
    }
}





TagsPanel - хочу и здесь иметь сервис, но он нуль, так же как и в других похожих компонентах.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class TagsPanel extends Panel implements Property.ValueChangeListener {

    private static final long serialVersionUID = 1L;

    @Autowired //null
    private UserService userService;


    public TagsPanel() {

        initLayout();

    }
.......
}




ApplicationInitializer

Код: java
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.
public class ApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {

        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();

        rootContext.register(ApplicationConfiguration.class);
        registerSpringContextLoaderListener(servletContext, rootContext);
        registerVaadinServlet(servletContext, rootContext);
    }

    private void registerVaadinServlet(ServletContext servletContext, AnnotationConfigWebApplicationContext rootContext) {

        VaadinServlet vaadinServlet = new VaadinServlet();
        ServletRegistration.Dynamic vaadinServletRegistration = servletContext.addServlet("vaadinServlet",
                vaadinServlet);
        vaadinServletRegistration.setInitParameter("ui", AdminPanelMain.class.getName());
        vaadinServletRegistration.setInitParameter("UIProvider", SpringUIProvider.class.getName());
        vaadinServletRegistration.setLoadOnStartup(1);
        vaadinServletRegistration.addMapping("/*");

    }

    private void registerSpringContextLoaderListener(ServletContext servletContext,
            AnnotationConfigWebApplicationContext rootContext) {
        servletContext.addListener(new ContextLoaderListener(rootContext));
        servletContext.addListener(new ContextCleanupListener());
        servletContext.addListener(new RequestContextListener());
    }
}




Когда я создаю объект TagsPanel, то объект UserService=null - почему?

Спасибо за помощь.
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716088
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_,

Простите за вопрос, а как вы создаёте TagsPanel?
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716089
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В первом куске кода

Код: java
1.
private Panel tagsPanel = new TagsPanel();
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716090
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDiver_webdev_,

Простите за вопрос, а как вы создаёте TagsPanel?
Код: java
1.
private Panel tagsPanel = new TagsPanel();
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716092
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_,

В таком случае, спринг понятия не имеет что вам туда нужно что-то инжектить.
Инжект будет только в тех объектах, которые создает контекст спринга, через оператор NEW никакой магии не будет.
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716101
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если же например делать Вот так


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Component("TagsPanel")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class TagsPanel extends Panel implements Property.ValueChangeListener {

...............

}


@Component("UserPanel")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class UserPanel extends Panel{

................

}



То получим

Код: java
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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
13:25:51,286 SEVERE [com.vaadin.server.DefaultErrorHandler] (default task-3) : org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adminPanelMain': Injection of autowired dependencies failed; ne
sted exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.vaadin.ui.Panel com.jdev.blog.admin.AdminPanelMain.addUserPanel; nested exception is org.springframework.beans.factor
y.NoUniqueBeanDefinitionException: No qualifying bean of type [com.vaadin.ui.Panel] is defined: expected single matching bean but found 2: TagsPanel,UserPanel
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:296) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:985) [spring-context-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at com.jdev.blog.admin.SpringUIProvider.createInstance(SpringUIProvider.java:25) [classes:]
	at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:199) [vaadin-server-7.2.5.jar:7.2.5]
	at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:74) [vaadin-server-7.2.5.jar:7.2.5]
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) [vaadin-server-7.2.5.jar:7.2.5]
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408) [vaadin-server-7.2.5.jar:7.2.5]
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:237) [vaadin-server-7.2.5.jar:7.2.5]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:177) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:727) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_51]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_51]
	at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_51]
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.vaadin.ui.Panel com.jdev.blog.admin.AdminPanelMain.addUserPanel; nested exception is org.springframework.beans.factory.NoUni
queBeanDefinitionException: No qualifying bean of type [com.vaadin.ui.Panel] is defined: expected single matching bean but found 2: TagsPanel,UserPanel
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	... 40 more
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.vaadin.ui.Panel] is defined: expected single matching bean but found 2: TagsPanel,UserPanel
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:970) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	... 42 more



Явное именование Компонентов не помогает, Спринг берет за название Компонент от какого наследуемся...
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716107
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_,

Тип поля поменяй с Panel на TagsPanel.
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716108
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл добавить,

в главном классе

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@PreserveOnRefresh
@Slf4j
public class AdminPanelMain extends UI {
	
	@Inject
	private UserService userService;

	private static final long serialVersionUID = 1L;

	@Inject
	private Panel addUserPanel;
	
	@Inject
	private Panel tagsPanel;

.....
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716113
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz_webdev_,

Тип поля поменяй с Panel на TagsPanel. - 5 БАЛОВ!!!

Я дурко! )))

Вопрос решен, а я то вижу, что ругается, но не на тот Panel думал, под носом не видел. )))
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716144
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если попробовать вот так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@PreserveOnRefresh
@Slf4j
public class AdminPanelMain extends UI {

.....
	@Inject
        @Qualifier("UserPanel")
	private Panel addUserPanel;
	
	@Inject
        @Qualifier("TagsPanel")
	private Panel tagsPanel;

.....


должно работать. Это если не хочется завязываться на конкретный класс, а использовать интерфейс.
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716153
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDiverЭто если не хочется завязываться на конкретный класс, а использовать интерфейс.
Да, так иногда бывает лучше для абстракции. Но, по-моему, не в данном случае.
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716183
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DDiverА если попробовать вот так - А можно поинтересоваться тогда почему у меня вот таким макаром не работало?

Код: java
1.
@Component("TagsPanel")
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716187
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_DDiverА если попробовать вот так - А можно поинтересоваться тогда почему у меня вот таким макаром не работало?

Код: java
1.
@Component("TagsPanel")


Наверное потому что это аннотация для класса-компоненты, а не для инъекции в поле.
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716201
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_,

Потому что это аналог вот такого
Код: xml
1.
2.
3.
<bean name="TagsPanel" class="x.y.z">
…
</bean>


а инжект идёт по типу, о чём собственно вам и кричал спринг в стэктрейсе.
@Qualifier явно указывает на имя бина который нужно инжектить
вроде так.
Because autowiring by type may lead to multiple candidates, it is often necessary to have more control over the selection process. One way to accomplish this is with Spring’s @Qualifier annotation.
For a fallback match, the bean name is considered a default qualifier value.
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716211
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczНаверное потому что это аннотация для класса-компоненты, а не для инъекции в поле. Даже затрудняюсь какой способ выбрать, но наверное просто при построении UI будет лучше различать конкретные панели, а не просто Panel.

Если можно в догонку спрошу, а то сейчас гуглю на эту тему.

У меня отдельный проект в котором я запихнул все entyties и Repositories (Spring Data JPA)... Они у меня отдельной библиотекой как депенденси подключены в проекте.
Сейчас нужно как-то подсунуть Спрингу, чтоб он автоматически просканировал репозитории из библиотеки.
Какое лучшее решение? Или всё-таки нужно отдельно репозитории для каждого проекта создавать?


Репозитории и сущности закинул в отдельный проект, так как у меня 2 проекта пользуется ими, я разбил на серверную и клиентскую часть свой проект.

Спасибо.
...
Рейтинг: 0 / 0
Vaadin 7 and Spring injection - не работает 100%
    #38716212
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DDiver_webdev_,

Потому что это аналог вот такого
Код: xml
1.
2.
3.
<bean name="TagsPanel" class="x.y.z">
…
</bean>



а инжект идёт по типу, о чём собственно вам и кричал спринг в стэктрейсе.
@Qualifier явно указывает на имя бина который нужно инжектить
вроде так.
Because autowiring by type may lead to multiple candidates, it is often necessary to have more control over the selection process. One way to accomplish this is with Spring’s @Qualifier annotation.
For a fallback match, the bean name is considered a default qualifier value. Спасибо - теперь понятно, а я вот пару часов с "бубном" танцевал...
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Vaadin 7 and Spring injection - не работает 100%
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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