我是scala和vaadin的新手,我只是在试验。我试图在我的scala vaadin应用程序中使用spring应用程序上下文和spring di,但无法获取要注入的数据源。我不知道,也许我正在做一些根本错误的事情,但这是我的代码:
的web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<description>
Vaadin production mode</description>
<param-name>productionMode</param-name>
<param-value>false</param-value>
</context-param>
<servlet>
<servlet-name>Scalatest Application</servlet-name>
<servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
<init-param>
<description>Vaadin application class to start</description>
<param-name>application</param-name>
<param-value>com.example.scalatest.ScalaApp</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Scalatest Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
应用程序上下文:
<bean id="main" class="com.example.scalatest.ScalaApp">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="url"/>
<property name="username" value="root"/>
<property name="password" value="pass"/>
</bean>
和我的scala类
var dataSource:DataSource = _;
def setDataSource(datasource:DataSource){
dataSource = datasource;
}
无效,ds在启动时为空。 有人可以指导我吗?
答案 0 :(得分:1)
你遇到的主要问题是你的应用程序(ScalaApp)没有被Spring容器实例化,而是由VaadinServlet实例化 - 确保它确实存在。有几种策略。以下是可以帮助您的示例项目:https://github.com/archiecobbs/dellroad-stuff-vaadin-spring-demo3
更多建议......
不是自己编写一个setter,而是将@BeanProperty注释添加到您的变量中。 Scala编译器将为您的变量生成setter和getter:
@BeanProperty private var dataSource:DataSource = _
甚至还有更好的方法 - 使用基于Spring的注释的容器配置。如果您的上下文中只有一个DataSource
类型的bean,只需将@Autowired
添加到您的变量中(不需要在上下文文件中定义xml - 您的类应该注释为@Component): / p>
@Component
class ScalaApp {
@Autowired private var dataSource:DataSource = _
}
以下是更多信息:http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-annotation-config