【问题标题】:Grails Plugin Development - override domain classGrails 插件开发 - 覆盖域类
【发布时间】:2013-08-13 12:29:08
【问题描述】:

Grails 中的插件是模块化应用程序的好方法。文档建议覆盖应用程序中插件的工件,该插件使用此插件。

这真的是最好的方法吗?

我们通过例子来描述:插件中定义了一个域类“org.User”。应用程序覆盖此域类。如果我使用“grails run-app”,则没有警告并且可以正常工作。但是 Eclipse (GGTS) 抱怨“类 org.User 的重复类定义无效”。对于某些开发人员来说,这无关紧要,但我喜欢 IDE 帮助通过诸如“自动完成”之类的 stuf 进行编码。

最后,两个类都被编译并放在 java 类加载器上。类的应用程序版本在插件版本之前加载。类解析器首先找到它,这就是它起作用的原因。如果我在这一点上错了,请纠正我。在一个类加载器中拥有一个类的两个版本真的是个好主意吗?

有什么选择?

【问题讨论】:

  • 虽然应该不会有什么问题,既然插件比app先编译,那么在app中需要重写domain类吗?插件不能做你期望它做的事吗?
  • 在我的示例中,插件正在处理所有的自动化/身份验证信息。在应用程序中,域“用户”中有附加字段,这些字段与安全性无关。顺便说一句:通过使用继承来扩展用户,视图和控制器中存在一些问题。

标签: grails grails-plugin grails-domain-class


【解决方案1】:

您可以像Spring Security Core 插件一样,提供User 类作为模板,因此使用此插件的应用程序可以选择创建自己的类或安装您的默认用户类。

插件用户模板为here,在应用程序中负责创建此模板的脚本为here

您还需要一个配置值来了解要使用的类,并动态使用它。

P.S: 有像 Shiro 和 Spring Security 这样好的安全插件,也许检查它们而不是自己创建更容易。

【讨论】:

  • 感谢您的建议! Spring Security Core 插件使用脚本来生成工件。这是此处描述的第二个选项grails.github.io/grails-howtos/en/…。你会说它应该是创建插件工件的首选方式吗?
  • 是的,脚本是创建可配置插件工件的首选方式。如果它是一个静态功能,例如您不希望用户更改的控制器操作,那么您可以直接提供它,而无需创建脚本。
  • 此答案中提供的链接已过时
猜你喜欢
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 2014-09-07
  • 2011-10-31
  • 1970-01-01
相关资源
最近更新 更多