国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

JBOSSAOP學(xué)習(xí)筆記-Mixin類和多重繼承

2019-11-18 16:22:42
字體:
供稿:網(wǎng)友
mixins and IntrodUCtions
很多人說道AOP,都以為AOP就是截取器,切入點表達(dá)式,方面和實現(xiàn)(advices)。其實AOP不止這些,另外一個很重要的功能在JBOSS AOP里面就是可以透明的給java類傳入接口。你可以強制一個類實現(xiàn)的接口,甚至你可以附加另外的類(mixins)來實現(xiàn)這個接口。就像C++
里面的多重集成。

引入
首先我們介紹怎么強制現(xiàn)有的類來實現(xiàn)你希望它實現(xiàn)的接口。
首先的例子是讓一個非可持久化類實現(xiàn)持久化能力。這對你將是十分有用的代碼。

 public class POJO
{
  PRivate String field;
}


要使它可以持久化很簡單。
<introduction class="POJO">
   <interfaces>java.io.Serializable</interfaces>
</introduction>


上面的xml定義讓AOP框架知道你要把Serializable接口應(yīng)用到你的類中。在這里你可以自由的增加任何接口到你的類上,只需要添加interfaces元素就可以了。
如果你的類沒有實現(xiàn)接口,AOP框架會增加實現(xiàn)的方法給你的類。這些方法會委派給AOP框架,但需要使用截取器或?qū)崿F(xiàn)來進(jìn)行維護(hù),否則NullPointerException會拋出。

mixin It Up
引入接口只是限制你,在實現(xiàn)接口時,如果你的類沒有實現(xiàn),就用內(nèi)部的截取器或?qū)崿F(xiàn)來實現(xiàn)。這個地方就是Mixin要用的地方了。AOP框架允許你定義Mixin類來實現(xiàn)你要實現(xiàn)的接口。這個類的實例化
將在你首次調(diào)用引入接口的方法的時候。

繼續(xù)我們使用一個Externalizable 類來實現(xiàn)java.io.Externalizable 這個接口。

 public class POJO
{
  private String field;
}


要讓他實現(xiàn)externalizable很簡單

<introduction class="POJO">
   <mixin>
      <interfaces>
         java.io.Externalizable
      </interfaces>
      <class>ExternalizableMixin</class>
      <construction>new ExternalizableMixin(this)</construction>
   </mixin>
</introduction>


和上面一樣這里只要求POJO實現(xiàn)一個接口,你自己可以在這里實現(xiàn)你的很多接口。

這里的class元素定義了實現(xiàn)接口externalizable的Mixin類,POJO來實現(xiàn)。
construction 元素允許你使用JAVA代碼來定義實例化Mixin類的時候你想用的方法。JBOSS AOP 會使用一個字段使實例化的POJO持有你的實現(xiàn)類ExternalizableMixin的句柄。這個字段會使用你在construction里提供的代碼來進(jìn)行初始化。上面的this指的就是POJO自身的實例。

最后就是你必須實現(xiàn)Mixin類了。
public class ExternalizableMixin implements java.io.Externalizable
{
   POJO pojo;

   public ExternalizableMixin(POJO pojo)
   {
      this.pojo = pojo;
   }

   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
   {
      pojo.stuff2 = in.readUTF();
   }
   public void writeExternal(ObjectOutput out) throws IOException
   {
      out.writeUTF(pojo.stuff2);
   }
}

多重繼承 Multiple Inheritance
需要注意的一點就是Mixin使你的JAVA在內(nèi)部實現(xiàn)了多重集成。雖然在外部你不需要直接在XML里面映射多重集成或者聲明綁定,但實際上它使你實現(xiàn)了多年以來C++所具有的優(yōu)點。
雖然多數(shù)的專家都反對使用多重集成,但如果恰當(dāng)?shù)氖褂贸橄蟮腗ixin類來實現(xiàn)多重集成在很多地方對你的設(shè)計還是很有幫助的。進(jìn)入討論組討論。

(出處:http://m.survivalescaperooms.com)



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 揭西县| 萍乡市| 山阳县| 霸州市| 惠东县| 郴州市| 衡阳县| 尤溪县| 南开区| 枣庄市| 绍兴县| 黑龙江省| 蒲江县| 长岭县| 高密市| 井冈山市| 察隅县| 柳江县| 汉寿县| 霍林郭勒市| 华安县| 萨迦县| 鄄城县| 邵武市| 六盘水市| 中山市| 中阳县| 宁津县| 珠海市| 西青区| 邯郸县| 宝清县| 大竹县| 五台县| 云林县| 苍梧县| 东港市| 连州市| 绵竹市| 吴桥县| 新野县|