私は私のようなロギング特性を定義したのScala 2.9.1Scalaの2.9ブリッジ法
を使用しています:
trait Logging {
def debug(msg: String, throwables: Throwable*) = ....
....
}
そして私はミックスインのロギング特性JMSPublisherクラスを持っています:
class JMSPublisher extends Publisher with Logging {
def publishProducts(list: List[_ <: Product]) = ....
def publish(list: Seq[Product]) = ....
}
これはすべてコンパイルされます。私の問題は、JMSPublisherをSpringにロードしたいユーザーがいることです。彼はSpring 2.5.6を使用しています。
起動時にApplicationContextが読み込まれると、IllegalStateExceptionが発生してアプリケーションがクラッシュし、Logging特性に関連するブリッジメソッドが見つからないというエラーが表示されます。
Initialization of bean failed; nested exception is java.lang.IllegalStateException: Unable to locate bridged method for bridge method 'public void com.app.messaging.JmsPublisher.debug(java.lang.String, scala.collection.Seq)'
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480)
.....stack trace follows.......
このコードはScala-2.8の下で動作し、Scalaは2.9でブリッジされたいくつかのメソッドを持つ特性をマークしていると聞いています。私はこれが春に失敗する原因だと思う。 Springでクラスをロードできない場合は、Scala-2.9にアップグレードできません。
誰もこの問題に遭遇しましたか?修正や回避策はありますか?
幸いなことに私たちの実際のアプリケーションには影響しません。いくつかの特性定義メソッドが存在しないため、いくつかのBeanにエラーがあることを示すSpring IDEだけです。 – Nick
これを参照してください:http://stackoverflow.com/questions/8748625/why-are-concrete-function-implementations-in-traits-compiled-to-bridge-methodsi-i – Janx