`
zk_chs
  • 浏览: 215594 次
  • 性别: 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 编程【转】

    7. **ScalaTest与Spring测试**:ScalaTest是一个流行的Scala测试库,可以与Spring TestContext Framework结合,方便地进行集成测试和单元测试。 8. **Akka与Spring**:Scala中的Akka库是用于构建并发和分布式系统的...

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

    SpringData JPA是Spring框架的一个模块,用于简化JPA(Java Persistence API)的使用。它提供了一个统一的API来访问各种持久化技术,如Hibernate、EclipseLink等。通过SpringData JPA,你可以利用注解驱动的方法来...

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

    标题中的“spring boot + scala + spark http驱动spark计算”揭示了一个使用现代技术栈构建的数据处理系统。这个系统基于Spring Boot框架来提供HTTP服务,利用Scala作为编程语言,并借助Apache Spark进行大数据计算...

    一个 scala jdbc 库,需要 spring-jdbc

    在本场景中,"一个 scala jdbc 库,需要 spring-jdbc" 指的是一个 Scala 编写的 JDBC 库,该库依赖于 Spring 的 JDBC 模块。Spring JDBC 提供了一个抽象层,简化了与 JDBC API 的交互,使得数据库操作更加简洁、易于...

    Springboot 结合Apache Spark 2.4.4与Scala 2.12 集成示例

    在本集成示例中,我们将探讨如何将Spring Boot与Apache Spark 2.4.4以及Scala 2.12版本相结合,实现一个简单的"Hello World"应用。Spring Boot以其便捷的微服务开发能力,而Apache Spark是大数据处理领域中的一员...

    scala3 scala3 scala3 scala3 scala3

    Scala3,也被称为Scala 3或Dotty,是Scala编程语言的一个重大更新,旨在提高其简洁性、可读性和类型安全性。Scala3的发布标志着该语言的进一步成熟,它引入了一系列改进,旨在解决早期版本中的一些痛点,同时保持对...

    scala jdbc 库,需要 spring-jdbc

    在压缩包`dwScalaSpringJDBC-master`中,很可能是包含了一个示例项目,演示如何在Scala项目中集成和使用Spring JDBC。这个项目可能包含了以下部分: 1. 配置文件:如`application.properties`或`application.yml`,...

    基于maven的scala与java相互调用的简单实例

    假设我们有一个Scala类`HelloScala.scala`: ```scala package com.example object HelloScala { def sayHello(): String = "Scala says Hello!" } ``` 以及一个Java类`HelloJava.java`: ```java package ...

    scala sdk scala-2.12.3

    Scala-2.12.3是Scala的一个特定版本,它包含了对Java 8及更高版本的支持,并提供了性能优化和新功能。 Scala SDK主要包括以下组件: 1. **编译器**:Scala编译器将Scala源代码转换为Java字节码,使得程序可以在...

    scala写的第一个wordcount例子

    Scala编写的WordCount程序是一个实用的学习工具,它涵盖了语言基础、函数式编程思想、并行处理和文件I/O等多个核心概念。通过这个实例,我们可以深入理解Scala如何处理数据,并为后续的大数据处理和分布式计算打下...

    scala2.12.1Windows镜像包

    - **安装**:`scala-2.12.1.msi`是一个Windows安装程序,用于在Windows系统上安装Scala开发环境,包括Scala编译器(scalac)和Scala REPL(Read-Eval-Print Loop)。 - **集成开发环境**:通常配合IDEA或IntelliJ ...

    基于Scala的Spring Boot、Akka HTTP实现的LayIM设计源码

    本项目是基于Scala开发的Spring...该项目是一个聊天室系统,利用Spring Boot作为基础框架,Scala作为主要编程语言,Akka HTTP作为服务器端技术,支持实时消息通信、用户管理、群组管理等功能,以提升用户体验和互动性。

    windows版scala-2.11.12.zip

    在这个"windows版scala-2.11.12.zip"压缩包中,包含的是Scala 2.11.12版本的Windows兼容安装文件,这是Scala的一个稳定版本,适用于开发人员在Windows操作系统上进行Scala编程。 Scala 2.11.x系列是Scala的一个主要...

    面向Java开发人员Scala指南,Scala和servlet的比较

    总的来说,Scala为Java开发者提供了一个更高效、更具表现力的编程环境,尤其是在处理并发和Web开发时。然而,学习Scala也需要一定的投入,因为它的语言特性较为复杂,对于习惯了Java的开发者来说,可能需要时间适应...

    Scala语法简明教程

    - `for`循环是Scala的一个强大特性,它可以处理多种迭代模式,包括嵌套循环、跳过某些元素等。 ```scala for (i ) println(i) ``` - **方法定义**: - 方法定义在Scala中更为简洁,支持默认参数、可变参数、...

    scala + mybatis 数据库查询

    - 在Scala中,我们需要创建一个`SqlSessionFactoryBuilder`,然后使用它来构建`SqlSessionFactory`。这通常在应用的初始化阶段完成。 - 配置文件(如`mybatis-config.xml`)通常包含数据源、事务管理器和Mappers的...

    scala学习源代码

    模式匹配是Scala中的一个强大特性,它允许我们对值进行解构,并根据不同的结构执行不同的操作。在处理数据结构或事件处理时,模式匹配能提供清晰的代码结构。 此外,Scala还支持 Actors模型,这是处理并发和分布式...

    scala实战高清讲解

    - Spark:Apache Spark是一个基于Scala构建的大数据处理框架,展示了Scala在大数据领域的应用。 "Scala编程超级详细的实战书籍.pdf"这本书很可能涵盖了以上所有主题,并通过实例深入浅出地讲解了这些概念,对于...

    快学scala习题及答案详解

    总之,这个压缩包提供了一个全面的Scala学习路径,不仅有理论讲解,还有实践应用,是Scala初学者或进阶者的宝贵资源。通过做题和查看答案,学习者能够加深对Scala的理解,提升编程能力,最终实现快速学习的目标。

Global site tag (gtag.js) - Google Analytics