论坛首页 Java企业应用论坛

关于JAVA注解的一个梦想

浏览 9039 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-10-25   最后修改:2009-10-25
我觉得这种用aspjectJ最好,当然运行时不能再改了,能避免从内部调用不取cache的问题,性能还好
0 请登录后投票
   发表时间:2009-10-25  
一粒蛋 写道
你这个需要,可能用动态代理比 annotation 更容易 ……

继续跑题 …… 一次定义完所有 find_xxxs :(可能对于没接触过 ruby 的有点不好懂)
def method_missing(method, *params)
  if method.to_s =~ /find_(\w+)s/
    cache[params] ||= const_get($1.capitalize).find(*params) # params 可多个
  else
    raise 'method not found'
  end
end


或者
def self.cached *methods
  @old_m ||= {}
  methods.each {|m|
    @old_m[m] = method(m)
    define_method(m){|params|
      cache[params] ||= old_m[params]
    }
  }
end
# 现在可以方便的用一行定义哪些要 cache,哪些不要 cache:
cached :find_users, :find_roles


这东西不就是等于反射么....付出效率而已。
0 请登录后投票
   发表时间:2009-10-26  
楼主也就是想用动态代理+Annotation为某个方法调用做增强吧?

至于调用效率,直接调用和反射调用的效率差距肯定是有的.

直接调用的话.很多信息,比如调哪一个虚函数,方法参数类型等在编译的时候就已经确定了.
而使用 动态代理+Annotation 则把确定这些信息的逻辑移到了运行期(比如需要根据方法名搜索出对应的Method实例),效率自然会变低.


0 请登录后投票
   发表时间:2009-10-26  
aspjectJ 挺不错,比自己写注解强
0 请登录后投票
   发表时间:2009-10-26   最后修改:2009-10-26
呵呵,我是想JDK下一版能直接支持AOP注解,在进行方法内联时直接嵌入注解类中定义的拦截方法...
0 请登录后投票
   发表时间:2009-11-01  
是啊 两者有可比性吗?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics