2012-07-17 32 views
0

我是scala和vaadin的新手,我只是在試驗。我試圖在我的scala vaadin應用程序中使用spring應用程序上下文和spring di,但無法獲取要注入的數據源。我不知道,也許我做一些根本性的錯誤,但這裏是我的代碼:我想在我的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> 

,並在我的斯卡拉類

var dataSource:DataSource = _; 
def setDataSource(datasource:DataSource){ 
dataSource = datasource; 
} 

不工作,ds在啓動時爲空。 任何人都可以引導我嗎?

回答

1

您遇到的主要問題是您的應用程序(ScalaApp)未由Spring容器實例化,而是由VaadinServlet進行實例化 - 請確保它的確如此。有幾種策略。下面是示例項目,可以幫助你:https://github.com/archiecobbs/dellroad-stuff-vaadin-spring-demo3

一些更多的建議...

而是自己寫一個二傳手,添加@BeanProperty註釋到您的變量。 Scala編譯器將生成setter和getter了變量:

@BeanProperty private var dataSource:DataSource = _ 

甚至有更好的辦法 - 使用Spring的基於註解的容器配置。如果您在上下文中有DataSource類型的唯一一個bean時,只需添加@Autowired到您的變量(不需要上下文文件中的XML定義 - 類應標註爲@Component):

@Component 
class ScalaApp { 
    @Autowired private var dataSource:DataSource = _ 
} 

這裏更多信息:http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-annotation-config

相關問題