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

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

这就意味着:如果一个 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