Scala与Spring:强强联合
2010-08-04 00:00:00 来源:WEB开发网关于回调
可以通过隐式转换将Spring回调轻松转换为Scala函数,如GenericJpaDaoSupport对象中所示:
implicit def jpaCallbackWrapper[T](func:(EntityManager) => T) = {
new JpaCallback {
def doInJpa(session:EntityManager ) = func(session).asInstanceOf[Object]}
}
借助于这个转换,我们可以通过一个函数来调用JpaTemplate的execute方法而无需匿名内部类JPACallback了,这样就能直接与感兴趣的对象打交道了:
jpaTemplate.execute((em:EntityManager) => em.createQuery(…)// etc. );
这么做消除了另一处样板代码。
关于getter和setter
默认情况下,Scala编译器并不会生成符合JavaBean约定的getter和setter方法。然而,可以通过在实例变量上使用Scala注解来生成JavaBean风格的getter和setter方法。下面的示例取自上文的PersonDaoTestCase:
import reflect._
@BeanProperty var personDao:PersonDao = _
@BeanProperty注解告诉Scala编译器生成setPersonDao(…)和getPersonDao()方法,而这正是Spring进行依赖注入所需的。这个简单的想法能为每个实例变量省掉3~6行的setter与getter方法代码。
第二步:按需进行依赖注入的富领域对象
到目前为止,我们精简了DAO模式的实现,该实现只能持久化实体的状态。实体本身并没有什么,它只维护了一个状态而已。对于领域驱动设计(DDD)的拥趸来说,这种简单的实体并不足以应对复杂领域的挑战。一个实体若想成为富领域对象不仅要包含状态,还得能调用业务服务。为了达成这一目标,需要一种透明的机制将服务注入到领域对象中,不管对象在何处实例化都该如此。
更多精彩
赞助商链接