如何在Scala对象中使用Spring Autowired(或手动连线)?

ber*_*rdw 12 spring scala lift autowired

我试图使用Spring与Scala.我知道Autowired可以使用Scala类,但我使用的是需要一个对象的Web框架,我想在其中注入一个dao.我想知道该怎么做?对不起,我是Scala的新手,先谢谢了.

    @Service
    object UserRest extends RestHelper {
        @Autowired
        @BeanProperty
        val userRepository: UserRepository = null;

        .....
    }

    <beans>
         .....
         <bean id="userRest" class="com.abc.rest.UserRest" >
              <!--- this is my attempt to manually wire it --->
              <property name="userRepository" ref="userRepository"/>
         </bean>
    </beans>
Run Code Online (Sandbox Code Playgroud)

axt*_*avt 15

基本上,你有两个问题:

  • 财产应该是可变的,var而不是val

  • Scala的所有方法object都是static,而Spring需要实例方法.实际上,Scala使用UserRest$在场景后面命名的实例方法创建一个类,并且您需要使其单例实例UserRest$.MODULE$可用于Spring.
    Spring可以将配置应用于预先存在的单例实例,但它们应该由方法返回,而是UserRest$.MODULE$一个字段.因此,您需要创建一个返回它的方法.

所以,这样的事情应该有效:

object UserRest extends RestHelper {
   @BeanProperty
   var userRepository: UserRepository = null;

   def getInstance() = this
   ...
}
Run Code Online (Sandbox Code Playgroud)

.

<bean id="userRest" 
    class="com.abc.rest.UserRest" 
    factory-method = "getInstance">
    <property name="userRepository" ref="userRepository"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

可以替换<property>使用@Autowired,但不能取代人工的bean声明@Service由于与上述单一实例的问题.

也可以看看: