【问题标题】:Grails-The different dependence Injection ways in grailsGrails-grails中的差异依赖注入方式
【发布时间】:2014-12-23 17:31:05
【问题描述】:

在grails中注入依赖的不同方式有什么区别:

  1. ABCService abcService
  2. 定义 abcService

  3. @Autowired ABCService ABCService

【问题讨论】:

  • def 形式在早期版本的 Grails 中总是被推荐,因为开发时重新加载通过替换​​类加载器来操作 - 如果你给出一个显式类型,你最终会得到“X 不能重新加载时会被强制转换为 X" 错误。我相信最近的 Grails 中基于代理的重新加载器在这方面做得更好,但旧习惯很难改掉(更重要的是,Grails 1.x 时代的大量示例代码和文档库仍然存在并且正在获得由新用户复制)。
  • 您能解释一下什么是“基于代理的重新加载器”吗?
  • 最新版本的 grails 使用 github.com/spring-projects/spring-loaded,这是一个 Java 代理,允许它在运行时交换修改后的字节码,而无需替换整个类加载器。

标签: grails service inject


【解决方案1】:
  1. 指定了预期的类型,如果名称为abcService的服务(或其他具有此类名称的Spring bean)将具有不同的class,那么您将在此处获得ClassCastException
  2. 任何名称为abcService的bean
  3. Spring 注释,它是可选的。但是,如果您标记了一个字段,但 Grails/Spring 找不到这样的 bean,它将抛出 NoSuchBeanDefinitionException(如果它不存在,前两个将得到 null@Autowired 也可以与 def 类型结合使用

基本上,Grails 服务是标准的 Spring bean,Grails 只是遵循convention over configuration,对于services 目录中的每个类,它将创建一个名称为abcService 的bean,可以自动装配到其他bean 中。所有其他工作都由 Spring 完成。另请参阅Spring and Grails 的文档

【讨论】:

    猜你喜欢
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多