WEB开发网
开发学院软件开发Java Scala与Spring:强强联合 阅读

Scala与Spring:强强联合

 2010-08-04 00:00:00 来源:WEB开发网   
核心提示: 该拦截器需要做的唯一一件事就是将加载的实体传递给RichDomainObjectFactory的autowire方法,对于该示例应用来说,Scala与Spring:强强联合(9),onLoad方法的实现保证了每次从数据库中加载Person实体后都将NotificationService注入其中,

该拦截器需要做的唯一一件事就是将加载的实体传递给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)) 
  } 
}

上一页  4 5 6 7 8 9 10  下一页

Tags:Scala Spring 强强联合

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接