Nutz是一个国产开源项目,Nutz的显著特点是实用小巧,将方便留给开发人员。它的功能是替代SSH/SSI,让开发变得更好更快。
 
Nutz与大牌的SSH比,它仅仅依赖一个字节码包。而全然是实现了SSH的功能,并有不少的创新之处。由于Nutz还很年轻,很多地方有待改进,如果你做个小项目,不妨一用。
 
Nutz做为开源的项目,如果能得到商业的支持,未来前景会很好!
 
 
下面是Nutz的官方介绍,实际上还没有自己的官方站点,代码在Google code上。下面是Nutz对外宣传词:

同传统的 SSH 相比,它具备如下特点:

 -- 当前最新版,整个 jar 文件共 568k  -- 针对 JDBC 的薄封装,无缓存  -- 提供了 Dao (ORM, SQL 管理), Ioc, Mvc, Json解析 等必要功能  -- 各个部分可以独立使用,比如在 Spring 里采用 Nutz.Dao ,又比如在 Nutz.Ioc 里使用 Hibernate 等  -- 除了 AOP 部分依赖了  javassist ,其它所有部分均不依赖第三方 jar 文件。
这就意味着:如果一个 Web 应用,你在 WEB-INF/lib 下只 需要放置一个 nutz.jar 以及一个 javassist.jar 就够了
当然你要使用其它的连接池,数据库驱动,打印PDF支持等功能,还需要自行添置 jar 包。

Nutz 为谁而设计?

如果你觉得 Hibernate 控制比较繁琐,iBatis 编写SQL又比较麻烦,Nutz.Dao 专为你设计。 如果你觉得在多个服务器部署或者修改 Spring 配置文件很麻烦,Nutz.Ioc 专为你设计 如果你觉得直接写 XML 配置文件很麻烦,可视化编辑器又没控制感,Nutz.Mvc 专为你设计 如果你觉得 JSON 转换很麻烦(要写超过一行以上的代码),Nutz.Json 专为你设计 如果你觉得 Java 语法不如 Ruby 便捷, Nutz.Castor 以及 Nutz.Lang 专为你设计 如果你以前根本没接触过 SSH ,只使用 JDBC 编程, 整个 Nutz 专门为你设计 你只要在你的 classpath 下部署这个 500多K 的小 jar 包,你会得到上述所有好处

Nutz的Ioc与SpringIoc相比,有很大的不同,它的配置文件时json格式的,注入的方式也花样繁多。下面是个例子:
 
import java.util.Calendar; 

public  class Pet { 
         private  int fetchCount; 

         private String name; 

         private Calendar birthday; 

         private Pet friend; 

         public Pet() { 
        } 

         public  void onFetch() { 
                 this.fetchCount++; 
        } 


         public Pet(String name) { 
                 this.name = name; 
        } 

         public String getName() { 
                 return name; 
        } 

         public  void setName(String name) { 
                 this.name = name; 
        } 

         public Calendar getBirthday() { 
                 return birthday; 
        } 

         public  void setBirthday(Calendar birthday) { 
                 this.birthday = birthday; 
        } 

         public Pet getFriend() { 
                 return friend; 
        } 

         public  void setFriend(Pet friend) { 
                 this.friend = friend; 
        } 

         public  int getFetchCount() { 
                 return fetchCount; 
        } 

         public  void setFetchCount( int fetchCount) { 
                 this.fetchCount = fetchCount; 
        } 
}
 
var ioc = { 
        xb : { 
                events : { 
                        fetch : 'mypack.OnFetchPet' 
                }, 
                fields : { 
                        name : 'XiaoBai' 
                } 
        }, 
        xh : { 
                events : { 
                        fetch : 'onFetch' 
                }, 
                fields : { 
                        name : 'XiaoHei' 
                } 
        } 

}
 

import org.nutz.ioc.Ioc; 
import org.nutz.ioc.impl.NutIoc; 
import org.nutz.ioc.loader.json.JsonLoader; 

public  class HelloPet { 
         public  static  void main(String[] args) { 
//                Ioc ioc = new NutIoc(new JsonLoader("mypack/pets.js")); 
//                Pet pet = ioc.get(Pet.class, "xiaobai"); 
//                System.out.printf("%s - [%s]\n", pet.getName(), pet.getBirthday().getTimeZone().getID()); 
//                Pet xh = ioc.get(null, "xiaohei"); 
//                System.out.printf("%s's friend is %s\n", xh.getName(), xh.getFriend().getName()); 
// 

//                Ioc ioc = new NutIoc(new JsonLoader("mypack/inner.js")); 
//                Pet pet = ioc.get(Pet.class, "xb"); 
//                System.out.println(pet.getFriend().getName()); 

                Ioc ioc =  new NutIoc( new JsonLoader( "mypack/events.js")); 
                Pet pet = ioc.get(Pet. class"xb"); 
                ioc.get(Pet. class"xb"); 
                ioc.get(Pet. class"xb"); 
//                System.out.printf("%s be fetch %d times", pet.getName(), pet.getFetchCount()); 

                Pet xh = ioc.get(Pet. class"xh"); 
                ioc.get(Pet. class"xh"); 
                System.out.printf( "%s be fetch %d times\n", xh.getName(), xh.getFetchCount()); 
        } 
}
 
XiaoHei be fetch 2 times 

Process finished with exit code 0