加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:03:45 所属栏目:安全 来源:网络整理
导读:我试图使用 Spring与 Scala.我知道Autowired可以使用Scala类,但我使用的是需要一个对象的web框架,我想在其中注入一个dao.我想知道该怎么做?对不起,我对Scala很新,感谢提前. @Service object UserRest extends RestHelper { @Autowired @BeanProperty val us
我试图使用 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>

解决方法

基本上,你有两个问题:

>财产应该是可变的,即var而不是val
> Scala对象的所有方法都是静态的,而Spring需要实例方法.实际上Scala在场景后面创建了一个名为UserRest $的实例方法的类,你需要让它的单例实例UserRest $.MODULE $可用于Spring.
Spring可以将配置应用于预先存在的单例实例,但它们应该由方法返回,而UserRest $.MODULE $是一个字段.因此,您需要创建一个返回它的方法.

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

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

   def getInstance() = this
   ...
}

.

<bean id="userRest" 
    class="com.abc.rest.UserRest" 
    factory-method = "getInstance">
    <property name="userRepository" ref="userRepository"/>
</bean>

您可以替换< property>使用@Autowired,但由于上述单例实例的问题,无法用@Service替换手动bean声明.

也可以看看:

> What is the Java equivalent of a Scala object?
> 3.3.2.2 Instantiation with a static factory method

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读