如何在Spring MVC项目中有效地使用Scala?

loy*_*low 18 java spring scala maven

我想创建一个多模块(maven)spring MVC应用程序,其模块如下:

web
persistance (hibernate)
core (general libs)
models
job-server (queue based jobs)
services (business logic)
Run Code Online (Sandbox Code Playgroud)

现在在这个项目中使用Scala,我可以在任何地方写scala吗?或者我应该使用scala作为我的服务模块,使用java作为Web模块?

我知道hibernate必须在java中.

思考?建议吗?

有什么问题需要注意吗?这是一个好主意吗?我是否需要破解某些部件才能将它们粘合在一起?

sou*_*ica 17

是的,您可以将Scala用于Spring MVC代码和Hibernate类.

以下是我的一个项目中Scala中的Spring MVC控制器的示例:

@Controller
class HomeController {
  val log: Logger = LoggerFactory.getLogger(this.getClass.getName)

  @RequestMapping(Array("/"))
  def home: String = {
    log.debug("HomeController::home")

    "home/home"
  }
}
Run Code Online (Sandbox Code Playgroud)

以及Hibernate域类的一个例子.请注意,对于类的用户,由公共Scala集合类调整的Hibernate私有Java集合类的使用(由Scala的JavaConversions类帮助).

@Entity
class Role {
  @Id @GeneratedValue
  var id: Long = _

  @Index(name="role_name")
  var name: String = _

  var created_at: Date = _
  var updated_at: Date = _  

  @ManyToMany
  private var sub_role: java.util.Set[Role] = _
  def subRoles: Set[Role] = {
    if (sub_role == null) sub_role = new java.util.HashSet[Role]
    sub_role
  }

  @ManyToMany
  private var permission: java.util.Set[Permission] = _
  def permissions: Set[Permission] = {
    if (permission == null) permission = new java.util.HashSet[Permission]
    permission
  }
}
Run Code Online (Sandbox Code Playgroud)

我发现我必须使用Java 的唯一事情就是编写@Retention(RUNTIME)注释(用于JSR-303验证).

我使用Maven和maven-scala-plugin以及混合的Java/Scala项目.