我正在尝试将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的所有方法object
都是static
,而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声明。
也可以看看:
太酷了。我想知道在Spring 3.1中是否存在非XML方式。
@ericacm:实际上,您可以创建一个
@Configuration
对象并UserRest$.MODULE$
从其带@Bean
注释的方法返回。它已在Spring 3.0中提供。实际上,它说我尝试编译时找不到UserRest $的值。幸运的是,当我定义def getInstance()= this时,它也一样有效。谢谢一堆,这将使我永远。