Mixins and Introductions  很多人说道AOP,都以为AOP就是截取器,切入点表达式,方面和实现(advices)。其实AOP  不止这些,另外一个很重要的功能在JBOSS AOP里面就是可以透明的给JAVA类传入接口。你  可以强制一个类实现的接口,甚至你可以附加另外的类(mixins)来实现这个接口。就像C++  里面的多重集成。   引入  首先我们介绍怎么强制现有的类来实现你希望它实现的接口。  首先的例子是让一个非可持久化类实现持久化能力。这对你将是十分有用的代码。    public class POJO {   private String field; } 
 要使它可以持久化很简单。  <introduction class="POJO">    <interfaces>java.io.Serializable</interfaces> </introduction> 
 上面的XML定义让AOP框架知道你要把Serializable接口应用到你的类中。在这里你可以自由的  增加任何接口到你的类上,只需要添加interfaces元素就可以了。  如果你的类没有实现接口,AOP框架会增加实现的方法给你的类。这些方法会委派给AOP框架,但  需要使用截取器或实现来进行维护,否则NullPointerException会抛出。   Mixin It Up  引入接口只是限制你,在实现接口时,如果你的类没有实现,就用内部的截取器或实现来实现。这  个地方就是Mixin要用的地方了。AOP框架允许你定义Mixin类来实现你要实现的接口。这个类的实例化  将在你首次调用引入接口的方法的时候。    继续我们使用一个Externalizable 类来实现java.io.Externalizable 这个接口。    public class POJO {   private String field; } 
 要让他实现externalizable很简单    <introduction class="POJO">    <mixin>       <interfaces>          java.io.Externalizable       </interfaces>       <class>ExternalizableMixin</class>       <construction>new ExternalizableMixin(this)</construction>    </mixin> </introduction> 
 和上面一样这里只要求POJO实现一个接口,你自己可以在这里实现你的很多接口。    这里的class元素定义了实现接口externalizable的Mixin类,POJO来实现。  construction 元素允许你使用JAVA代码来定义实例化Mixin类的时候你想用的方法。JBOSS AOP  会使用一个字段使实例化的POJO持有你的实现类ExternalizableMixin的句柄。这个字段会使用  你在construction里提供的代码来进行初始化。上面的this指的就是POJO自身的实例。    最后就是你必须实现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在内部实现了多重集成。虽然在外部你不需要直接  在XML里面映射多重集成或者声明绑定,但实际上它使你实现了多年以来C++所具有的优点。  虽然多数的专家都反对使用多重集成,但如果恰当的使用抽象的Mixin类来实现多重集成  在很多地方对你的设计还是很有帮助的。  
 
  |