nutz: 更可爱的反射 -pg电子游戏网站

`
zozoh
  • 浏览: 58484 次
  • 性别:
  • 来自: 北京
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 社区版块
    • ( 29)
    • ( 271)
    • ( 13)
    存档分类
    最新评论

    nutz: 更可爱的反射

      博客分类:
    • nutz
    java 的反射让我又爱又恨

    • 爱: 是因为它的强大
    • 恨: 是因为它的麻烦

        比如我有一个 pojo:

    public class pet{
        private string name;
        public pet(string name){
            this.name = name;
        }
        public string getname(){
            return name;
        }
    }

        如果通过反射创建它,通常要这样写:

    constructor c = pet.class.getconstructor(string.class);
    pet pet = c.newinstance("xiaobai");

        但是,有些时候,很多人喜欢通过静态方法来创建一个对象:

    public class pet {
    	public static pet create(string name) {
    		return new pet(name);
    	}
    	private string name;
    	private pet(string name) {
    		this.name = name;
    	}
    	public string getname() {
    		return name;
    	}
    }

        那么通过反射就要这样写:

    method m = pet.class.getmethod("create", string.class);
    pet pet = (pet) m.invoke(null, "xiaobai");

        这很不通用

    • 我必须知道我的 pojo 到底是通过构造函数创建,还是通过静态方法创建
    • 如果 pojo 做了修改,我就得修改我的创建方法
    • 在这点上,java 表现出了它的僵硬
    • 虽然它想通过反射带给程序员更大的灵活性
    • 这有点讽刺


    有没有更方便的方法?

        这是我在写 时,曾经认真考虑的一个问题。所以我创建了 。

        你的 pojo 无论是通过 静态函数 还是 构造函数 创建,你都可以这样写:

    pet pet = mirror.me(pet.class).born("xiaobai");

        这里是 mirror 类更详细的介绍:

        上述写法的缺点就是: -- 因为它不得不寻找构造函数以及静态函数

        如果你打算一口气构建 1000 个对象,并且你的系统对效率要求较高,怎么办呢?

    有没有更快的方法?

       

    borning b = mirror.me(pet.class).getborning("xiaobai");
    pet pet = b.born(lang.array("xiaobai"));


        将 borning 对象保存起来,下次直接调用,这样就能省却了每次查找 构造函数静态函数 的开销。

    但是这有意义吗?

        它同:

    constructor c = pet.class.getconstructor(string.class);
    pet pet = c.newinstance("xiaobai");


        有区别吗? 我完全可以将 constructor 也保存起来嘛。

        是的,如果你完全确定你的 pojo 就是通过 constructor 构建的,使用 borning 可能对你意义不是太大。

    borning 的意义就是

    让你不再需要考虑对象是由 constructor 构建,还是由 method 来构建

        因此,它为你提供了一个新的选择:

                 当你打算 通过反射 构建对象时
                      并且你 不确定 你的对象的构造方式将来会不会发生改变
                           你可以 使用 borning
      
    它会让你感觉,反射更可爱一些

    延伸阅读

        nutz 项目 >
        增强反射--mirror >

    分享到:
    评论
    20 楼 2010-02-07  
    反射好像现在很少用了
    19 楼 2010-02-02  
    很好,但是效率差。
    18 楼 nenyalanye_1 2010-02-01  
    hommy8 写道
    mycybyb 写道
    javaonejcy 写道
    java的反射机制是必须有的不是可有可无的,因为虚拟机从磁盘加载类文件就需要用到这个机制。

    在这里这个真不是必须的,我写过一个jvm,就是没有实现反射。

    高手,自己实现jvm

    自己写jvm。h手
    17 楼 2010-02-01  
    mycybyb 写道
    javaonejcy 写道
    java的反射机制是必须有的不是可有可无的,因为虚拟机从磁盘加载类文件就需要用到这个机制。

    在这里这个真不是必须的,我写过一个jvm,就是没有实现反射。

    高手,自己实现jvm
    16 楼 2010-02-01  
    javaonejcy 写道
    java的反射机制是必须有的不是可有可无的,因为虚拟机从磁盘加载类文件就需要用到这个机制。

    在这里这个真不是必须的,我写过一个jvm,就是没有实现反射。
    15 楼 2010-01-31  
    用反射可以使系统的扩展性更强

    便于后期需求的更别进行扩展
    14 楼 2010-01-31  
    java的反射机制是必须有的不是可有可无的,因为虚拟机从磁盘加载类文件就需要用到这个机制。所以这个机制的性能如果存在问题那我们也是毫无办法的。这种机制比直接调用慢那是肯定的,因为直接调用应该是调用的被虚拟机缓存起来的结果。所以,如果你大量地方要用反射,那么把部分重复操作缓存起来是合理的可行的。
    13 楼 2010-01-30  
    truekbcl 写道
    说实在的,我觉得语言提供反射机制是一种倒退。反射连鸡肋都算不上。

    java如果没有反射,那才是鸡肋!
    12 楼 2010-01-30  
    beeke 写道
    nutz的mirror是把创建对象的过程做了一种抽象,单独拿出来没有太大意义,但是用在nutz里却恰到好处。

    看nutz的源码,反射实在是的太多了,lang、mirror和castors的反射简直是无所不在。
    而这些库都是作为底层基础库存在的。
    从一次http请求到mvc到ioc到dao,这个过程势必会调用多次底层库。
    zozoh有没有测试过这个性能?


    当你的确遇到性能问题的时候才应该考虑之,反射用得其所是没什么问题的.
    反射的确比直接调用慢, 但是, 实际差异并不明显,除非你有确凿证据表明性能瓶颈出在反射上.
    单单做几个循环得出一些数据,就能说明性能好坏吗?

    nutz正在为自身开发一个简洁的字节码工具,到时候也会大大减少反射的使用.
    11 楼 2010-01-30  
    nutz的mirror是把创建对象的过程做了一种抽象,单独拿出来没有太大意义,但是用在nutz里却恰到好处。

    看nutz的源码,反射实在是的太多了,lang、mirror和castors的反射简直是无所不在。
    而这些库都是作为底层基础库存在的。
    从一次http请求到mvc到ioc到dao,这个过程势必会调用多次底层库。
    zozoh有没有测试过这个性能?
    10 楼 2010-01-30  
    没反射,ioc就没法写那么简洁了。。。
    9 楼 truekbcl 2010-01-30  
    说实在的,我觉得语言提供反射机制是一种倒退。反射连鸡肋都算不上。
    8 楼 2010-01-29  
    技术滥用,闲的无聊。
    7 楼 2010-01-29  
    详细的看了下包装后的反射, 我实在没有了解到lz所阐述的“好处”
    或者这个只是nutz中的微不足道的一小部分?
    6 楼 2010-01-29  
    反射是很强大,但是毕竟是耗资源的操作,能少用就少用吧
    5 楼 kjj 2010-01-29  
    那你怎么实现构造对象的!!!!
    如果你的实现只是封装了java反射的功能的话,实在是多次一举,难道你直接操作了字节码,不好意思,我没看你的源码!!
    4 楼 2010-01-29  
    我认为楼主还没有真正理解反射的意义所在,如果反射都是你这么用,确实很糟糕
    3 楼 2010-01-29  
    正在看中。。。
    2 楼 2010-01-29  
    对啊, 这是nutz其中一个很好的东西!
    1 楼 2010-01-29  
    我喜欢糖,喜欢简单直接,更喜欢简单粗暴,哈哈

    相关推荐

      nutz遵循apache协议,完全开放,文档齐全,永远免费(商用也是) 完整的mvc,ioc,dao,aop,快速开发web /桌面/嵌入式应用,无强制依赖 项目各种资源地址 秒回,就是这么爽 的企业级微服务框架,提供自动配置,...

      nutz 对于 java 程序员来说,除 ssh 之外,的另一个选择 项目目标 在力所能及的情况下,最大限度的提高web开发人员的生产力。 项目各种资源地址 手册地址 (发布新版本时更新) (基本做到文档有变动就更新) (新手...

      nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册

      lang -- 更简洁的 java 函数以及更丰富的反射支持 aop -- 轻便快速的切面编程支持 plugin -- 轻便的插件机制 resource -- 资源扫描 它所有的功能均不依赖第三方 jar 包 这就意味着: 如果一个 web 应用,你在 web-...

      nutz特点: 轻 -- 当前最新版,整个 jar 文件共 910kb -- 针对 jdbc 的薄封装,无缓存 全 -- 提供了 dao (orm, sql 管理), ioc, aop, mvc, json解析 等必要功能 活 -- 各个部分可以独立使用,比如在 spring 里采用 ...

      对于 java 程序员来说,除 ssh 之外,可能还有另外一个选择: nutz 当然,它是开源的,并且是完全免费的。 同传统的 ssh 相比,它具备如下特点: 轻 -- 当前最新版,整个 jar 文件共 820k 薄 -- 针对 jdbc 的薄封装...

      更多的简化java语法的函数和类 -- nutz.lang 以及 nutz.castors 不依赖任何第三方 jar 包,从而便于程序员建立开发环境,部署,甚至重新编译 nutz 的源代码。 不幸的是在第一版,我还是依赖了 javassist 可以很好的...

      用于nutz邮箱验证jar包

      nutz生成javabean工具.zip

      spring 里采用 nutz.dao ,又比如在 nutz.ioc 里使用 hibernate 等整 -- 它所有功能均不依赖第三方 jar 文件。这就意味着:如果一个 web 应用,你在 web-inf/lib 下只 需要放置一个 nutz.jar 就够了当然你要使用其它...

      可连接多种数据库根据表直接生成nutz所需的bean

      nutz框架使用手册,从零到有深入学习nutz平台开发

      nutz框架jar包

      可以快速定位路径 页面 本jar包是nutz实用插件 希望大家多多下载

      nutz-1.r.60.jar

      在做nutz redis集成的实时,由于依赖包的问题被坑了一把,为了后人不要走同样的路,把所有依赖包放在上面了。

      让nutz支持freemarker。 具体使用和在struts2中使用是一样的

      nutz框架开发手册,框架很方便使用的,和大家分享

      nutz-weba jetty launcher nutz.mvc ajax view添加依赖(maven)<dependency><groupid>org.nutz</groupid><artifactid>nutz-web</artifactid><version>1.r.62</version></dependency>新建一个配置文件web....

      用开源框架nutz搭建的mvc框架,适合小型系统的开发,快捷方便!

    global site tag (gtag.js) - google analytics
    网站地图