国产探花免费观看_亚洲丰满少妇自慰呻吟_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://www.survivalescaperooms.com)



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 霍山县| 乃东县| 德庆县| 杂多县| 南充市| 石林| 泊头市| 彩票| 抚顺市| 蒙城县| 石景山区| 衡南县| 锦州市| 尉氏县| 若羌县| 绍兴县| 隆昌县| 崇州市| 定结县| 盖州市| 朝阳市| 高邮市| 宁国市| 杭锦旗| 高尔夫| 溧水县| 天气| 鄂尔多斯市| 依兰县| 理塘县| 安陆市| 万源市| 长治县| 麻阳| 保靖县| 佛冈县| 新宁县| 克拉玛依市| 图片| 泸水县| 平远县|