如何配置弹簧和vaadin将自己的豆类注入vaadin视图



gys,帮助!我要生气。我拥有基于Spring Boot的Spring Initialzr生成的Spring Vaadin项目。我想在同一项目中拥有我的后端和前端功能,并以"自动注释。我错了?我已经创建了上下文XML配置文件来描述我的bean:

<?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.xsd">
<context:annotation-config/>
<bean class="ru.yudnikov.blog.backend.PostManager" id="postManager"/>
<bean class="ru.yudnikov.blog.backend.PostModel" id="postModel" scope="prototype"/>
</beans> 

我已经声明了实现applicationContextaware的应用程序类(将静态链接放置到我的上下文),但是当我调试方法setApplicationContext(ApplicationContextContextContext)时,我已经看到ApplicationContext并不为空。它包含vaadin bean的分层,例如PostView,我想在其中向我的经理(控制器)注入"授权的注释"。但是,如果我将Centext从XML文件中设置为新的类Path上下文,我将失去视图漏洞。我可以。't找到一种将我的bean定义添加到现有上下文中的方法。我尝试了setParent()setClassLoader()和refresh(),但这无济于事。如何解决此问题?我应该尝试"合并"这两个上下文或什么?

使用vaadin spring addon(https://github.com/vaadin/spring)。

这是Main UI类的示例(我在此处使用Javax注入,但是您可以使用Spring Autowed注释):

@SpringUI
@Theme("new")
@Widgetset("com.example.NewWidgetSet")
public class NewUI extends UI implements Constants {
    private static final Logger logger = LoggerFactory.getLogger(NewUi.class);
    private CssLayout contentLayout;
    private SpringViewProvider viewProvider;
    @Inject
    public RessuUi(HeaderLayout headerLayout, SpringViewProvider viewProvider) {
        this.headerLayout = headerLayout;
        this.viewProvider = viewProvider;
    }
    @Override
    protected void init(VaadinRequest request) {
        initNavigator();
        initRootLayout(); // init here content
    }
    private void initNavigator() {
        Navigator newNavigator = new Navigator(this, contentLayout);
        newNavigator.addProvider(viewProvider);
        setNavigator(newNavigator);
    }
    @Override
    public void detach() {
        logger.debug("Detaching UI.");
    }
}

视图类的示例:

@SpringView(name = UserFormView.NAME)
public class UserFormView extends VerticalLayout implements View {
    private MyService myService;
    @Autowired
    public UserFormView(MyService myService) {
        this.myService = myService;
    }
}

您还需要在main/webapp/web-inf目录中创建ApplicationContext.xml:

<?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-4.1.xsd">
    <context:component-scan base-package="com.mypackage.to.scan"/>
</beans>

也创建MainConfiguration类:

@Configuration
@EnableVaadin
@ComponentScan
@PropertySource("classpath:application.properties")
public class MainConfiguration {
}

还添加Web Servlet:

@Slf4j
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = true, ui = NewUi.class, widgetset = "fi.ssm.ressu.NewWidgetSet",
    heartbeatInterval = 60, closeIdleSessions = true)
public class NewServlet extends SpringVaadinServlet {
}

您可以在Vaadin注入和范围内阅读更多。

最新更新