spring in action学習ノート2 AOPの例


5.aopを実現する例
1.まず予備類を注文します.演技のインターフェースを定義します.コードは以下の通りです.
    public interface Perform {
    void perform();
    }
    一つの方法については、ショーショーショーを行い、2つの実現類、ショーボーイとショーガールを定義します.
    public class ShowBoy implements Perform{
    public void perform() {
        System.out.println("    ");
    }
}
    public class ShowGirl implements Perform{
    public void perform() {
        System.out.println("     ");
    }
}
これらはbeanさんがspringで管理してくれるので、springの配置ファイルに書いてください.今は書かないで、後でまとめて書きます.
    今は仕事をするべきです.まずお知らせを定義します.つまり、演目に何を挿入したいですか?
私たちは観客の種類を定義して、彼らに演技する時に、いくつかの動作をさせます.
public class Audience {
    public Audience() {
    }
    public void takeSeat(){
        System.out.println("          ,     ");
    }
    public void turnOffMobilePhone(){
        System.out.println("             ");
    }
    public void appluad(){
        System.out.println("       ,      ");
    }
    public void demandRefund(){
        System.out.println("     ,     !");
    }
}
このような定義の方法から分かるように、席を探すことと携帯電話を切ることは公演前に発生したはずです.拍手は演技後に発生したものです.払い戻しを要求することは公演後に発生したものです.
    まとめてみますと、Springのaop通知は5種類あります.
  Before:org.springframe ewark.aop.MethodBefore Adviceは、このインターフェースの代表方法の前に.
  After-returning:org.springframe ebook.aop.AfterReturningAdvice、この代表は帰った後
  After-throwing:org.springframe ebook.aop.Throws Adviceは、例外を投げた後を表します.
  Arond:org.aopalliance.intercept.MethodInterceptorは、一つの方法の周りを表しています.
  Introduction:org.spring frame ewark.aop.Introduction Interceptorは、導入を代表しています.
   
今から本当の通知を定義します.通知は何をするべきか、いつ何をするべきかを含めていません.
public class AudienceAdvice implements MethodBeforeAdvice, AfterReturningAdvice, ThrowsAdvice{
    private Audience audience;

    public void setAudience(Audience audience) {
        this.audience = audience;
    }

    public void before(Method method, Object[] objects, Object o) throws Throwable {
        audience.takeSeat();
        audience.turnOffMobilePhone();
    }

    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
        audience.appluad();
    }
    public void afterThrowing(Throwable throwable){
        audience.demandRefund();
    }
}
その中で何をするべきかはAudienceで定義されていますが、いつかこれらのインターフェースが実現する方法です.before、afterなどがあります.いつまでですか?
    通知があれば
この定義を接点として設定ファイルに直接定義する場合も、通知とターゲットを合わせてxmlファイルに定義します.切点は何ですか?切点はどのような方法でうどんを使うべきかを定義しています.彼は2つの定義方式があります.一つは正規表現を使って、希望の方法にマッチします.もう一つはaspectJ切点式を使います.
    今はカットもあります.
全面的にうどんを切って、完全なうどんも通知者を呼んで、直接xmlの中で配置します.
 
   
        
        
    
    
   
        
        
    
うどんはあります.基本的なことは全部できました.今はなんとかしてうどんを目標種類に使います.aopの原理は代理で実現します.だから私達は必要です.
声明代理店のベンさんです.
まず、前のShowBoyとShow Girlはxmlの中で声明のidに変えます.
ターゲットクラスですので、XMLは

    
代理店を作ります.
   
 
    
        
        
            
                audienceAdvice
            
        
        
            
                com.spring.springcase.Perform
            
        
    
今はエージェントをショーボーイに偽装しましたが、なぜこのようにしますか?
    今テストします
public class performTest extends TestCase{
    ApplicationContext ctx;
    @Override
    protected void setUp() throws Exception {
        ctx = new ClassPathXmlApplicationContext("spring-springcase.xml");
    }
    public void testShowBoy(){
        Perform perform = (Perform)ctx.getBean("showBoy");
        perform.perform();
    }
}
    :
          ,     
             
    
       ,      
今が欲しいなら
showGirlも代理しますので、それのxmlを書きます.
 

        
        
            
                audienceAdvice
            
        
        
            
                com.spring.springcase.Perform
            
        
    
もしもう一つがあるなら、あなたを疲れさせる代わりに、定義代理を発見します.ほとんどのコードは同じです.つまり、引用の目的種類が違っています.この時に共有コードを抜き出して、自分で変換の部分を書きます.
定義
代理の親類は、2つのパラメータを実現しています.その中のターゲットは自分で書きます.
 
        
            
                audienceAdvice
            
        
        
            
                com.spring.springcase.Perform
            
        
    
偽装を再声明するのは簡単です.
    
        
    
    
        
    
しかし、多くの人はやはりこのようにたくさんのものを定義したいと思っています.やはり面倒くさいです.また明日まとめます.
参照
いいですね.でも、xmlファイルの名前ははっきり書いてください.
すべてのxmlはspring-sprigcase.xmlという設定ファイルに書いてあります.-->