我有两个 Maven 模块:
逻辑(带有 bean 等的 Spring 项目) - 打包到 .jar
Web(具有弹簧性质的 Vaadin 项目)- 包到 .war
在 Web .pom 中,我依赖于逻辑。在 java 代码中,autowired 等是可以的。我想在 Web 项目中使用逻辑中的 bean。
我的 web.xml(Web 项目):路径:../src/main/webapp/WEB-INF
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml
</param-value>
</context-param>
我的应用程序上下文:(路径:../src/main/webapp/WEB-INF)
<beans ...
<context:annotation-config />
<import resource="logic.xml"/>
<context:component-scan base-package="b2b"
annotation-config="true" />
logic.xml 包含逻辑模块中 bean 的配置。基本包名称是 b2b。
在 UI 类中,我有:
@Autowired
private CompanyService companyService;
我尝试通过多种方式获取 bean,但在启动 Web 后,companyService 始终为空。
我应该添加什么来从 Web 模块中可见的逻辑模块中获取 bean?
界面类:
@Theme("mytheme")
@SuppressWarnings("serial")
@Controller
public class MyVaadinUI extends UI
{ }
我也在这里提到了 vaadin V7:在此处输入链接描述
但无济于事。
这是我的 UI 类:
enter code here
@Theme("mytheme")
@SuppressWarnings("serial")
@Controller
public class MyVaadinUI extends UI
{
SpringContextHelper helper = new SpringContextHelper(VaadinServlet.getCurrent().getServletContext());
private static Logger LOGGER = Logger.getLogger(MyVaadinUI.class);
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = MyVaadinUI.class, widgetset = "b2b.frontend.AppWidgetSet")
public static class Servlet extends VaadinServlet {
}
@Override
protected void init(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
setContent(layout);
final CompanyService companyService = (CompanyService) helper.getBean("companyService");
Button button = new Button("Click Me");
button.addClickListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
//layout.addComponent(new Label("Thank you for clicking"));
LOGGER.info("pushed the button");
layout.addComponent(new Label("aa " +companyService +" Thank you for clicking"));
}
});
layout.addComponent(button);
}
}