Scala与Spring:强强联合
2010-08-04 00:00:00 来源:WEB开发网该拦截器需要做的唯一一件事就是将加载的实体传递给RichDomainObjectFactory的autowire方法。对于该示例应用来说,onLoad方法的实现保证了每次从数据库中加载Person实体后都将NotificationService注入其中。
此外,还需要通过hibernate.ejb.interceptor属性将拦截器注册到JPA的持久性上下文中:
<persistence-unit name="ScalaSpringIntegration" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<property name="hibernate.ejb.interceptor" value="org.jsi.domain.jpa.DependencyInjectionInterceptor" />
</properties>
<!-- more properties here-->
</persistence-unit>
DependencyInjectionInterceptor非常强大,每次从数据库中加载实体后它都能将在Spring中配置的服务注入其中。那如果我们在应用代码而非JAP等框架中实例化实体时又该怎么办呢?
自动装配“手工”实例化的领域对象
要想自动装配应用代码中实例化的实体,最简单也是最笨的办法就是通过RichDomainObjectFactory的方式显式进行自动装配。由于这个办法将RichDomainObjectFactory类与实体创建代码紧耦合起来,因此并不推荐使用。幸好,Scala提供了“组件对象”的概念,它担负起工厂的职责,可以灵活实现构造逻辑。
对于该示例应用,我们采用如下方式实现Person对象以便“自动”提供自动装配功能:
import org.jsi.di.spring.RichDomainObjectFactory._
object Person {
def apply(name:String) = {
autoWireFactory.autowire(new Person(name))
}
}
更多精彩
赞助商链接