Jboss5学习Deployment callbacks

这个地方思维模式比较新颖,这里翻译一下:

      有时候一个bean了解其他已经发布的bean的信息是非常重要的。比如一个管理类需要了解他管理的bean对象的列表。比起将注册代码放到每一个发布的bean中,管理类在发布类的时候自动回调将是一种更好的解决方案。jboss的微内核可以通过@Install/@Uninstall注释或者<incallback>/<uncallback> 标签定义.

注意:incallback是installCallback的缩写,uncallback是uninstallCallback的缩写

public class Example {
    @Install
    public void addEditor(Editor editor) {
        ...
    }

    @Uninstall
    public void removeEditor(Editor editor) {
        ...
    }
}

<bean name="editorHolder" class="com.acme.Example">
    <incallback method="addEditor"/>
    <uncallback method="removeEditor"/>
</bean> 
上面的二段代码表示一个是一个意思,在每一个Editor的对象发布的时候,都会调用容器eidtorHolder的addEditor方法,相同道理,在每个Editor销毁的时候都会调用removeEditor方法。缺省情况下通过回调定义的方法中的参数的bean的类型决定查找的类,如果管理类中有多个同名的方法,但是参数不同,如果想发布某一特定的方法,可以在incallback标签中定义signature属性指定参数的名称

public class Example {
    public void addEditor(Editor editor) {
        ...
    }

    @Install
    public void addEditor(DifferentEditor editor) {
        ...
    }
}

<bean name="editorHolder" class="com.acme.Example">
    <incallback method="addEditor" signature="org.jboss.example.DifferentEditor"/>
</bean>

上面的二段代码表示的是相同的意思,只是给DifferentEditor实例化的时候进行回调。

每个bean可以定义多个回调函数,他会按照定义出现的顺序执行

public class Example {
    @Install
    public void addEditor(Editor editor) {
        ...
   }

   @Install
    public void addViewer(Viewer viewer) {
        ...
    }

    @Uninstall
    public void removeEditor(Editor editor) {
        ...
    }

    @Uninstall
    public void removeViewer(Viewer viewer) {
        ...
    }
}

<bean name="editorHolder" class="com.acme.Example">
    <incallback method="addEditor"/>
    <incallback method="addViewer"/>
    <uncallback method="removeEditor"/>
    <uncallback method="removeViewer"/>
</bean> 
缺省状态下是匹配到发布的被管理的bean到INSTALLED 状态的时候就会执行回调函数,也可以指定bean调用回调函数的的状态

public class Example {
    @Install(dependentState="Configured")
    public void addEditor(Editor editor) {
        ...
    }
}

 

<bean name="editorHolder" class="com.acme.Example">
    <incallback method="addEditor" state="Configured"/>
</bean> 
这样bean会在发布到Configured状态的时候执行回调函数,

<!--我个人添加的注释>

其中包括的状态如下

NOT_INSTALLED - deployment descriptor parsed
 DESCRIBED - aop dependencies added to the bean
 INSTANTIATED - an instance has been created
 CONFIGURED - properties have been injected
 CREATE - the create method, if defined, was called
 START - the start method, if defined, was called
 INSTALLED - custom install actions executed, bean is ready to access

<!--我个人添加的注释结束>

我们也可以给发布的bean配置whenRequired 属性

public class Example {
    @Install(whenRequired="Installed")
    public void addEditor(Editor editor) {
        ...
    }
}

 


<bean name="editorHolder" class="com.acme.Example">
    <incallback method="addEditor" whenRequired="Installed"/>
</bean> 
这样我们的管理类在到Installed状态的时候才会调用,默认状态时CONFIGURED

最后我们可以定义我们的bean管理类可以依赖的发布的bean的数量,通过cardinality 属性

public class Example {
    @Install(cardinality="2..n")
    public void addEditor(Editor editor) {
        ...
    }
}

<bean name="editorHolder" class="com.acme.Example">
    <incallback method="addEditor" cardinality="2..n"/>
</bean> 

这样定义表示我们的editorHolder只有在第二次到第n次发布的时候才会执行。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值