【问题标题】:Cake Pattern and Spring Configurer蛋糕模式和弹簧配置器
【发布时间】:2011-05-07 13:57:51
【问题描述】:

Spring 提供了实用程序Configurer 来使用外部配置数据解析占位符(有关详细信息,请参阅文档)。如何使用Cake Pattern 以类似的方式(即使用外部配置来解析占位符)配置我的组件?

例如:

 // properties configuration file

driver=com.mysql.jdbc.Driver
dbname=mysql:mydb
user=michael
password=*****

trait JdbcSupport {
  val dataSource:Datasource
  ...
}

trait OrderDAOComponent {self: JdbcSupport =>
  val dao: OrderDAO
  class OrderDAOImpl extends OrderDAO {...} // use the JDBC data source here
}

如何使用属性配置文件使用Cake Pattern初始化OrderDAO

【问题讨论】:

    标签: spring scala configuration dependency-injection


    【解决方案1】:
    trait XmlConfigJdbcSupport extends JdbcSupport {
      val xmlFile:String
      override val dataSource = readConfigAndReturnDatasource()
    }
    
    object MyContext extends OrderDAOComponent with XmlConfigJdbcSupport {
      override val xmlFile = "config.xml"
    }
    

    dataSource 应该是一个惰性值,以避免初始化顺序出现问题。

    【讨论】:

    • 我更喜欢通用 trait Configurer,它知道如何读取配置文件并按键返回值。
    • 在这种情况下你可以这样做: trait Configurer[A] { def a:A };特征 SomeDao { self: Configurer[DataSource] => ... };然后扩展 Configurer[DataSource] 以提供如何获取 DataSource 的实现,并将该 trait 与 SomeDao 混合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 2011-09-11
    • 2019-09-26
    • 2015-01-08
    相关资源
    最近更新 更多