天天看点

Nutz:Ioc

Nutz:Ioc

Nutz是一个国产开源项目,Nutz的显著特点是实用小巧,将方便留给开发人员。它的功能是替代SSH/SSI,让开发变得更好更快。

Nutz与大牌的SSH比,它仅仅依赖一个字节码包。而全然是实现了SSH的功能,并有不少的创新之处。由于Nutz还很年轻,很多地方有待改进,如果你做个小项目,不妨一用。

Nutz做为开源的项目,如果能得到商业的支持,未来前景会很好!

主页:http://code.google.com/p/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) {

        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 : {

                        fetch : 'onFetch'

                        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");

//                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

继续阅读