Scala与Spring:强强联合
2010-08-04 00:00:00 来源:WEB开发网Scala与Spring的整合可以在运行期轻松将服务透明地注入到各种对象中。后面将会提到,这种机制的技术基础是DDD,可以用一种优雅的方式将实体提升为富领域对象。
需求
为了说清楚何谓按需的依赖注入,我们为这个示例应用加一个新需求:在调用Person实体的link方法时,它不仅会链接相应的Person,还会调用NotificationService以通知链接的双方。下面的代码阐述了这个新需求:
class Person {
@BeanProperty var notificationService:NotificationService = _
def link(relation:Person) = {
relations.add(relation)
notificationService.nofity(PersonLinkageNotification(this, relation))
}
//other code omitted for readability
}
毫无疑问,在实例化完Person实体或从数据库中取出Person实体后就应该可以使用NotificationService了,无需手工设置。
使用Spring实现自动装配
我们使用Spring的自动装配来实现这个功能,这是通过Java单例类RichDomainObjectFactory达成的:
public class RichDomainObjectFactory implements BeanFactoryAware {
private AutowireCapableBeanFactory factory = null;
private static RichDomainObjectFactory singleton = new RichDomainObjectFactory();
public static RichDomainObjectFactory autoWireFactory() {
return singleton;
}
public void autowire(Object instance) {
factory.autowireBeanProperties(instance)
}
public void setBeanFactory(BeanFactory factory) throws BeansException {
this.factory = (AutowireCapableBeanFactory) factory;
}
}
更多精彩
赞助商链接