如何在groovy中列出JVM中的所有(groovy)类

发布于 2024-08-30 11:31:30 字数 1036 浏览 8 评论 0原文

我正在编写一个 DelegatingMetaClass,我想将其应用于项目中的所有 groovy 类,但我不知道如何获取项目中的所有类?

这是代码:

 /*
 This will work ok, since I know Foo beforehand, but what about classes 
 that do not exist yet?
 */
 def myMetaClass = new DelegatingMetaClass(Foo.class)
 InvokerHelper.metaRegistry.setMetaClass(Foo.class, myMetaClass)    

 /*
 how to do this?
 allGroovyClasses.each{
      def myMetaClass = new DelegatingMetaClass(it)
      InvokerHelper.metaRegistry.setMetaClass(it, myMetaClass)  
         }
 */


 class SimpleInterceptor extends DelegatingMetaClass{


 public SimpleInterceptor(final Class aclass) {
   super(aclass);    
   initialize();
 }

 public Object getProperty(Object object, String prop) {
     println ("I am in a property interceptor!!!")
   return super.getProperty(object, prop)
 }

 public Object invokeMethod(Object a_object, String a_methodName, Object[] a_arguments)
 {
     println ("I am in a method interceptor!!!")
     return super.invokeMethod(a_object, a_methodName, a_arguments) 
 }

I am writing a DelegatingMetaClass that I would like to apply to all groovy classes in my project, but I do not how to get hold of all classes in the project?

Here is the code:

 /*
 This will work ok, since I know Foo beforehand, but what about classes 
 that do not exist yet?
 */
 def myMetaClass = new DelegatingMetaClass(Foo.class)
 InvokerHelper.metaRegistry.setMetaClass(Foo.class, myMetaClass)    

 /*
 how to do this?
 allGroovyClasses.each{
      def myMetaClass = new DelegatingMetaClass(it)
      InvokerHelper.metaRegistry.setMetaClass(it, myMetaClass)  
         }
 */


 class SimpleInterceptor extends DelegatingMetaClass{


 public SimpleInterceptor(final Class aclass) {
   super(aclass);    
   initialize();
 }

 public Object getProperty(Object object, String prop) {
     println ("I am in a property interceptor!!!")
   return super.getProperty(object, prop)
 }

 public Object invokeMethod(Object a_object, String a_methodName, Object[] a_arguments)
 {
     println ("I am in a method interceptor!!!")
     return super.invokeMethod(a_object, a_methodName, a_arguments) 
 }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

盛装女皇 2024-09-06 11:31:31

有一个 如何在 java 中执行此操作的示例,它也应该与 groovy 一起工作。我认为这是一种粗略的方法。

你的目标是什么?

There's an example of how to do this in java, which should also work with groovy. I think it's a sketchy way to do it though.

What's you goal?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文