My favorites | Sign in
Project Home Downloads Wiki
Search
for
ioc_events  
事件监听
Updated Apr 25, 2011 by zozoh...@gmail.com

Top

事件监听


By zozoh ( zozohtnt@gmail.com )

#Top

都有哪些事件

Nutz.Ioc 容器有三种事件:

  • 对象被创建
  • 对象被从容器中取出
  • 对象被销毁

在这三种时刻,你如果想做一些特殊的操作,比如,当一个数据源被销毁时,你希望能够关闭所有的连接,你可以在 JSON 配置文件中,声明一下,你想监听什么事件,以及怎么监听。

#Top

怎么监听

我们为 Pet 对象增加一个新的属性:

public class Pet {

	private int fetchCount;
	
	... // 省略其他属性以及 getter 和 setter

#Top

通过实现一个触发器

#Top

触发器

package nutz.demo.ioc.book;//提醒: 不要把你的类放在缺省包中!!

import org.nutz.ioc.IocEventTrigger;

public class OnFetchPet implements IocEventTrigger<Pet> {

	public void trigger(Pet pet) {
		pet.setFetchCount(pet.getFetchCount() + 1);
	}

}

IocEventTrigger 接口只有一个方法,当它被调用的时候,就表示某个事件发生了。具体什么事件呢?完全看你在 JSON 配置文件中把这个触发器,声明在哪种事件下面

#Top

在 JSON 配置文件中声明监听的事件

var ioc = {
	xb : {
		events : {
			fetch : 'nutz.demo.ioc.book.OnFetchPet'
		},
		fields : {
			name : 'XiaoBai'
		}
	}
}

#Top

调用代码

Ioc ioc = new NutIoc(new JsonLoader("nutz/demo/ioc/book/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());

#Top

控制台输出

XiaoBai be fetch 3 times

#Top

通过对象自身的一个函数

这个函数必须为 public,并且不能有参数

#Top

为 Pet 对象增加一个函数:

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

#Top

在 JSON 配置文件中增加新的对象

xh : {
	events : {
		fetch : 'onFetch'
	},
	fields : {
		name : 'XiaoHei'
	}
}

#Top

调用代码

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

#Top

控制台输出

XiaoHei be fetch 2 times

#Top

监听其他事件

events : {
	fetch  : ... ,
	create : ... ,
	depose : ...
}

根据需要,你可以选择上述三个事件,为其声明触发器,或者触发函数。

Comment by yushis...@gmail.com, Feb 25, 2011

这里的fetchCount变量应该声明为静态变量才可以实现上述的结果吧! private static int fetchCount; 不然结果只会是1

Comment by project member zozoh...@gmail.com, Feb 26, 2011

不是,如果是静态变量反而不行了

Comment by yushis...@gmail.com, Feb 26, 2011

对喔!后面两个ioc.get(Pet.class, "xb");是不生成新实例的喔!犯晕,不好意思!


Sign in to add a comment
Powered by Google Project Hosting