事件监听

Jul 10, 2017 10:38:44 AM

作者:zozoh

都有哪些事件

Nutz.Ioc 容器有三种事件:

  • 对象被创建(create事件)
  • 对象被从容器中取出(fetch事件)
  • 对象被销毁(depose事件)
    在这三种时刻,你如果想做一些特殊的操作,比如,当一个数据源被销毁时,你希望能够关闭所有的连接,声明一下,你想监听什么事件,以及怎么监听。

注: 如果你的对象是 "singleton: false",那么容器创建了对象后就会立即忘记它的存在。因为鬼才知道你打算创建多少份该对象的实例,要是每份实例都记录的话,内存说不定爆了。所以这样的非单例对象,你在 depose 容器的时候,容器是不会调用它的 depose 方法的,即使你在配置文件中声明了它,因为容器根本就不会知道这样的对象曾经存在过。但是 create, fetch 事件还是会被调用到的。

怎么监听

通过对象自身的一个函数

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

为 UserService 对象增加一个函数:

  1. public void init() {
  2. init_sysuser();
  3. init_cmsuser();
  4. init_roles();
  5. log.debug("sysuer/cmsuser/roles init complete");
  6. }

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

  1. @IocBean(create="init")
  2. public class UserService {
  3. ...
  4. }

调用代码,或第一次被取出时

  1. ioc.get(UserService.class);

控制台输出

  1. 2016-12-15 DEBUG UserService(UserService.java:1024) : sysuer/cmsuser/roles init complete

ioc json文件下的配置

  1. xyz :{
  2. type : "xxx.yyy.zzz.XYZ",
  3. events : {
  4. create : ... , // 创建完成后,各种属性已经设置好
  5. fetch : ... , // 每次从ioc取出
  6. depose : ... // ioc容器销毁前,一般用于清理各种资源
  7. }
  8. }

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

切勿用ioc js和@IocBean同时定义一个bean,这样的话,只有一个会生效

本页面的文字允许在知识共享 署名-相同方式共享 3.0协议GNU自由文档许可证下修改和再使用。

原文: http://nutzam.com/core/ioc/events.html