Java 的反射让我又爱又恨
比如我有一个 POJO:
public class Pet{
private String name;
public Pet(String name){
this.name = name;
}
public String getName(){
return name;
}
}
如果通过反射创建它,通常要这样写:
Constructor<Pet> 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 表现出了它的僵硬
- 虽然它想通过反射带给程序员更大的灵活性
- 这有点讽刺
有没有更方便的方法?
这是我在写
Nutz 时,曾经认真考虑的一个问题。所以我创建了
Mirror。
你的 POJO 无论是通过 静态函数 还是 构造函数 创建,你都可以这样写:
Pet pet = Mirror.me(Pet.class).born("XiaoBai");
这里是
Mirror 类更详细的介绍:
http://code.google.com/p/nutz/wiki/lang_mirror
上述写法的缺点就是:
慢 --
因为它不得不寻找构造函数以及静态函数
如果你打算一口气构建 1000 个对象,并且你的系统对效率要求较高,怎么办呢?
有没有更快的方法?
有
Borning<Pet> b = Mirror.me(Pet.class).getBorning("XiaoBai");
Pet pet = b.born(Lang.array("XiaoBai"));
将 Borning 对象保存起来,下次直接调用,这样就能省却了每次查找
构造函数 或
静态函数 的开销。
但是这有意义吗?
它同:
Constructor<Pet> c = Pet.class.getConstructor(String.class);
Pet pet = c.newInstance("XiaoBai");
有区别吗? 我完全可以将 Constructor 也保存起来嘛。
是的,如果你完全确定你的 POJO 就是通过 Constructor 构建的,使用 Borning 可能对你意义不是太大。
Borning 的意义就是
让你不再需要考虑对象是由 Constructor 构建,还是由 Method 来构建
因此,它为你提供了一个新的选择:
当你打算
通过反射 构建对象时
并且你
不确定 你的对象的构造方式将来会不会发生改变
你可以
使用 Borning
它会让你感觉,反射更可爱一些
延伸阅读
Nutz 项目 >
http://nutz.googlecode.com
增强反射--Mirror >
http://code.google.com/p/nutz/wiki/lang_mirror
分享到:
相关推荐
Nutz遵循Apache协议,完全开放,文档齐全,永远免费(商用也是) 完整的Mvc,Ioc,Dao,Aop,快速开发Web /桌面/嵌入式应用,无强制依赖 项目各种资源地址 秒回,就是这么爽 的企业级微服务框架,提供自动配置,...
Nutz 对于 Java 程序员来说,除 SSH 之外,的另一个选择 项目目标 在力所能及的情况下,最大限度的提高Web开发人员的生产力。 项目各种资源地址 手册地址 (发布新版本时更新) (基本做到文档有变动就更新) (新手...
总之,Nutz代码生成器是Nutz框架下提高开发效率的有效工具,通过它,你可以快速搭建起基于Nutz的业务系统,节省时间和精力,更专注于业务功能的创新与优化。在实际开发中,结合Nutz的其他特性,如事务管理、拦截器、...
8. **源码阅读**:了解Nutz框架的源码,可以帮助我们更好地理解和定制框架,提高开发效率。 通过阅读老孟的博客和LendingCloud的表格规范,我们可以结合实际案例来学习这些知识点,从而提升我们的Nutz开发技能。...
该项目为全栈Java开发,采用Nutz框架实现Mvc/Ioc/Aop/Dao/Json一体化设计,源码包含2307个文件,涵盖1742个Java源文件、208个man文档、143个png图片、47个jpg图片、22个js脚本、21个psd设计文件、16个xml文件、13个...
5. **实战示例**:手册可能包含多个实际开发案例,如CRUD操作、表单验证、文件上传下载、AJAX交互等,帮助读者通过实践更好地理解和掌握Nutz框架的使用。 6. **性能优化**:对于大型项目,性能优化至关重要。手册...
Nutz的目标是简化开发流程,提高开发效率,使开发者更专注于业务逻辑。 2. **Redis**:Redis是一个高性能的内存数据结构服务器,它支持多种数据结构如字符串、哈希、列表、集合和有序集合,常用于缓存、消息中间件...
1. **Nutz Core**:这是Nutz框架的基础,包含了I/O、网络、反射、线程等核心功能。它提供了许多实用工具类,简化了Java开发中的常见任务,如对象转换、日期处理等。 2. **Nutz MVC**:Nutz MVC是Nutz框架的一个重要...
implementation 'org.nutz:nutz-boot-starter-web-jetty:最新版本号' ``` 3. **配置Nutz MVC** - 在项目根目录下创建一个`src/main/resources/nutz/app.properties`文件,这是Nutz的配置文件。添加以下基本配置...
【标题】:“Nutz迷你项目” “Nutz迷你项目”是一个基于Nutz框架的小型项目实例,旨在帮助开发者快速理解和...通过查看和分析这些文件,你可以更深入地了解Nutz框架的运用,以及如何在实际项目中灵活运用这些知识。
6. **Lang模块**:增强了Java语言的功能,提供了更简洁的函数以及丰富的反射支持,提高了代码的可读性和可维护性。 7. **Aop模块**:支持轻量级的面向切面编程,允许开发者以较少的侵入性实现横切关注点的分离。 8...
Nutz是一个轻量级、高性能的Java开发框架,它提供了丰富的功能,包括MVC、ORM、DAO、AOP、IOC等,使得Java开发者能够快速地构建应用系统。本篇文章将详细探讨Nutz框架中所需的jar包以及它们在项目中的作用。 首先,...
- 主要的区别在于Nutz的轻量级特性,它的MVC模型可能比Struts2更简单,但功能同样强大。 5. **最佳实践**: - 将业务逻辑与视图逻辑分离,模板只负责展示,不涉及复杂的计算。 - 合理组织模板文件结构,提高可...
Nutz是一个轻量级、高性能的Java开源框架,它提供了丰富的功能,包括MVC(Model-View-Controller)架构支持,使得开发者能够快速构建小型到中型的Web应用。本篇文章将详细介绍如何利用Nutz搭建MVC框架,并探讨其在...
通过这个Javadoc,开发者可以快速查找并了解Nutz框架中的各个类和方法,从而更好地进行代码编写。 2. `nutz-1.r.58.jar`:这是Nutz框架的核心库文件,包含了框架的所有功能模块。将此jar包添加到项目的类路径中,...
作为Nutz框架的一部分,Nutz Codematic可以无缝地与其他Nutz组件(如Nutz ORM)结合使用,实现更高效的开发流程。例如,生成的JavaBean可以直接用于Nutz ORM进行数据库操作,简化数据访问层的开发。 6. **学习与...
综上所述,"nutz 文件上传例子" 主要涵盖了使用 Nutz 框架进行文件上传的基本操作,包括配置、接收文件、处理文件以及利用 `nutz.plugin.multiupload` 插件进行更复杂的上传场景。在实际开发中,还需要关注文件安全...
5. `manual`:可能是一个子目录,包含了更多关于Nutz框架的详细教程或者补充文档,可能是Markdown、HTML或其他格式。 Nutz框架的核心特性包括: 1. **MVC模式**:Nutz提供了一个轻量级的MVC(Model-View-...