2016-03-29 16 views
0

Twitter Scala sınıfını kullanarak bir fasulye oluşturma konusunda güvendeyim. Yapıcı argümanları basit tipler değildir ve bunun yerine Scala Function1 türleridir. Bunu yaratmaya nasıl gidebilirim?Spring and Scala - Function1 constructor-arg

<bean id="permissivePolicy" class="com.twitter.finagle.http.filter.Cors.Policy"> 
</bean> 

Bu sınıfın yapıcı argümanları şunlardır:

1. allowsOrigin - Function1<String, Option<String>> 
2. allowsMethods - Function1<String, Option<Seq<String>>> 
3. allowsHeaders - Function1<Seq<String>, Option<Seq<String>>> 
4. exposedHeaders - Seq<String> 
5. supportsCredentials - boolean 
6. maxAge - Option<Duration> 

İyi değilim: anlamı

case class Policy(
    allowsOrigin: String => Option[String], 
    allowsMethods: String => Option[Seq[String]], 
    allowsHeaders: Seq[String] => Option[Seq[String]], 
    exposedHeaders: Seq[String] = Nil, 
    supportsCredentials: Boolean = false, 
    maxAge: Option[Duration] = None 
) 

, Bahar fasulye, ben türleri yapıcı-args geçmesi gerekiyor Scala'da, bu fasulyeyi yaratmaya nasıl gideceğimi bilmiyorum. Herhangi bir fikir?

cevap

0

Sonunda bunu sıraladı. Ben ilk application.xml için Scala-util eklemek zorunda:

<?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" 
     xmlns:scala-util="http://www.springframework.org/schema/scala/util" 
     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 
      http://www.springframework.org/schema/scala/util 
      http://www.springframework.org/schema/scala/util/scala-util.xsd"> 
Ben de (tıpkı bir arayüz temelde) function1 özelliğim olan Scala uygulanmasını oluşturmak için gerekli

:

package com.test.util 

    class Function1Impl extends Function1[String, Option[String]] { 
     override def apply(v1: String): Option[String] = Some("") 
    } 

Şimdi tekrar application.xml içinde, ben yapıcı args maç için gerekli fasulye yarattı ve permissivePolicy fasulye onları referans oluşturuldu:

 <bean id="scalaOptionBean" class="scala.Some"> 
     <constructor-arg value="" /> 
     </bean> 
     <bean id="function1Bean" class="com.test.util.Function1Impl" /> 
     <scala-util:seq id="scalaSeqBean" /> 

     <bean id="permissivePolicy" class="com.twitter.finagle.http.filter.Cors.Policy"> 
     <constructor-arg ref="function1Bean" /> 
     <constructor-arg ref="function1Bean" /> 
     <constructor-arg ref="function1Bean" /> 
     <constructor-arg ref="scalaSeqBean" /> 
     <constructor-arg type="boolean" value="true" /> 
     <constructor-arg ref="scalaOptionBean" /> 
     </bean> 

     <bean id="httpFilter" 
      class="com.twitter.finagle.http.filter.Cors.HttpFilter"> 
     <constructor-arg ref="permissivePolicy" /> 
     </bean> 

Essent bana bir İlkesi nesnesi verdi Doğru türden ikincil boş yapıcı-argümanlar. Bir noktada onları doldurmak istiyorsanız, yalnızca Function1Impl'yi değiştirmemiz veya application.xml dosyasındaki değerleri ayarlamanız yeterlidir.