`
zk_chs
  • 浏览: 212972 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

spring配合scala时,@Autowired的一个问题

阅读更多

今天在用spring配合scala时,遇到了一个关于@Autowired的问题,主要报错信息如下:

Caused by: java.lang.NoSuchMethodException: com.zk_chs.xxxxx.....<init>()
	at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_73]
	at java.lang.Class.getDeclaredConstructor(Class.java:2178) ~[na:1.8.0_73]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:80) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
	... 52 common frames omitted

 

根据报错信息来看的话,是因为构造函数的问题,那么,一定是scala编译时做了我们不知道的修改。我的代码:

/**
  * Created by zk_chs on 16/4/12.
  */
@Configuration
@EnableTransactionManagement
class MyBatisConfig @Autowired() (dataSource: DataSource) extends TransactionManagementConfigurer{

  @Bean
  override def annotationDrivenTransactionManager : PlatformTransactionManager = {
    new DataSourceTransactionManager(dataSource)
  }

  omitted......

}

 

在这里,我们的scala类在构造对象时,需要传入DataSource,这里采用了@Autowired,然后就会发生上面的错误,但是,如果在@Configuration中没有添加@Bean注解的话,那么又不会发生报错,例如下面的代码:

/**
  * Created by zk_chs on 16/4/12.
  */
@Service
class ApService @Autowired() (private val apMapper: ApMapper) {

  def getById (id: Int) = {
    apMapper selectByPrimaryKey id
  }

}

 

虽然不知道为什么,但是解决方式还是找到了,如果读者有兴趣的话,可以自己反编译生成的class文件,到时候找到原因分享给大家。这里可以使用如下方式对DataSource进行定义:

@Configuration
@EnableTransactionManagement
class MyBatisConfig extends TransactionManagementConfigurer{

  @Autowired
  private val dataSource: DataSource = null

  @Bean
  override def annotationDrivenTransactionManager : PlatformTransactionManager = {
    new DataSourceTransactionManager(dataSource)
  }

  omitted......

}

 

我们将dataSource变成类的属性,而不是构造函数的参数,val和var都可以,但都需要初始化,这样一来,便能解决掉构造函数的问题了。

 

0
3
分享到:
评论

相关推荐

    Spring 整合 Scala 编程【转】

    NULL 博文链接:https://keriny.iteye.com/blog/906440

    SpringBoot + SpringData Jpa + Scala + Mysql(java+Scala混编)

    SpringBoot + SpringData Jpa + Scala + Mysql(java+Scala混编)

    spring boot + scala + spark http驱动spark计算

    原始用的jetty做的http接口,最近有时间,研究了下spring boot + scala + spark做大数据计算

    scala+node+spring等书籍

    本txt文档内存有链接,为码云的链接,可使用git进行下载,内容已有一些书籍,包含spring,node,scala,已有scala编程实战,spring编程,node编程,以及我自己学习Elasticsearch的一些经验,欢迎大家下载与在此链接...

    IntelliJ Idea安装scala开发第一个scala程序

    大数据炒的越来越火了,我也学一下,今天搞定第一个程序,环境是Windows10系统,JDK9,IntelliJ Idea,安装scala-2.12.4,开发第一个scala程序

    scala写的第一个wordcount例子

    自己学习scala语言写的一个单词计数的例子,很好的用到了函数式编程思想,分享给大家共同学习。

    scala基础语法

    本文详细的介绍了scala的基础语法,如果你是一个入门者有没有一个很好的资料为建议你下载

    scala.epfl.ch:Scala中心@ EPFL的网站

    标量Scala中心的网站基础设施该网站是使用GitHub Pages和Jekyll构建和托管的。本地建筑使用Docker Compose 您需要在计算机上安装npm和Docker Compose。 npm installnpm run bower-installdocker-compose up生成的...

    Scala函数式编程

    很大篇幅都放在,使用scala实现scala默认库文件的API中,通过对简单的函数式编程逻辑的介绍和实践,主要是实践,建立起来一个比较明晰的scala思维模式,或者叫函数式编程的思维模式。 2 无副作用的函数式编程,同时...

    scala五本经典资料集合

    scala是一个经典的语言,Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。但是现在scala的相关学习资料不多,因此,本人总结了几篇写的较好的scala学习资料,包含&lt;ScalaQuery_Commerzbank_2011&gt;&lt;twitter-...

    scala学习源代码

    scala的小例子一个简单的例子有一点小帮助

    scala sdk scala-2.12.3

    scala-2.12.3 scala-2.12.3 scala-2.12.3 scala-2.12.3

    springboot-scala-withswagger:Scala语言采用Spring-Boot结合Swagger的一个简单例子

    在Scala中结合使用Spring Boot的基本指南 将JDK版本更新为1.8,以使用Lambda 动作可以返回rx.Observable,就像返回Callable或DeferredResult一样,请参见RxJavaController 当控制器返回Callable / DeferredResult ...

    Scala编程实战.zip

    此文档是讲解实战Scala,希望对喜欢大数据的同学有所帮助!!! 学习Scala语言,不仅仅意味着熟悉新的API,更重要的是...对于Scala新手来说这是一本不错的入门书,对于老手来说也是一本夯实基础,检视自己所学知识的好书。

    scala-sbt-scala编译工具

    scala 编译工具 sbt 安装包。 Little or no configuration required for simple projects Scala-based build definition that can use the full flexibility of Scala code Accurate incremental recompilation ...

    Scala学习之路(一)

    这篇文章是Scala方面的,scala的windows安装,scala的linux安装,以及第一个scala程序

    scala + mybatis 数据库查询

    这是一个简单实用的scala集成mybatis数据库查询代码,简单明了

    Scala实用指南

    本书共分为 4 个部分:第一部分详细介绍 Scala 的一些基础知识,并和 Java 中的相关概 念进行了参照,方便读者快速上手 Scala;第二部分进一步介绍 Scala 的一些中级知识,以及 与 Java 的一些差异点,方便读者编写...

    Scala语法简明教程

    Scala语法简明教程.pdf

Global site tag (gtag.js) - Google Analytics