Hatena::Groupseasarproject

きむきむのSeasar日記 このページをアンテナに追加 RSSフィード

seasar.org
<< 2004/05 >>
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
 | 

2004年05月18日

[]AOP AOP - きむきむのSeasar日記 を含むブックマーク はてなブックマーク - AOP - きむきむのSeasar日記 AOP - きむきむのSeasar日記 のブックマークコメント

こんな簡単なのでいいかな?


とりあえず、Kisser.javaにゲッターメソッドだけ追加

(getKissableは使ってないけど)

 String getName();

 Kissable getKissable();


Girl.javaにも以下のコードを追加

 public String getName() {

  return name_;

 }

 public Kissable getKissable() {

  return kissable_;

 }


MethodInterceptorを実装したクラスを作成

WordsOfKisser.java

package jp.gr.java_conf.kimura.seasar2.example.aop;

import jp.gr.java_conf.kimura.seasar2.example1.Kisser;

import org.aopalliance.intercept.MethodInterceptor;

import org.aopalliance.intercept.MethodInvocation;

public class WordsOfKisser implements MethodInterceptor {

 public Object invoke(MethodInvocation invocation) throws Throwable {

  String kisserName = ( (Kisser) invocation.getThis() ).getName();

  System.out.println(kisserName + " said \"Close your eyes.... \"\n");

  Object ret = invocation.proceed();

  System.out.println("\nAnd, " + kisserName + " said \"I love you.\"");

  return ret;

 }

}


Mainは、いつもと同じ

Main.java

package jp.gr.java_conf.kimura.seasar2.example.aop;

import jp.gr.java_conf.kimura.seasar2.example1.Kisser;

import org.seasar.framework.container.S2Container;

import org.seasar.framework.container.factory.S2ContainerFactory;

public class Main {

 public static void main(String[] args) {

  S2Container container = S2ContainerFactory.create("jp/gr/java_conf/kimura/seasar2/example/aop/config.dicon");

  Kisser kisser = (Kisser) container.getComponent(Kisser.class);

  kisser.kiss();

 }

}

いつも一緒だから、ここにAOP適用した方がいいかも。。。(なんか変な事、考えてた。卵が先か、鶏が先か、みたいな。。。)


config.dicon

<?xml version="1.0" encoding="UTF-8"?>

<components>

 <component name="wordsOfKisser" class="jp.gr.java_conf.kimura.seasar2.example.aop.WordsOfKisser"/>

 <component name="oreju" class="jp.gr.java_conf.kimura.seasar2.example1.Boy">

  <arg>'Oreju'</arg>

  </component>

 <component class="jp.gr.java_conf.kimura.seasar2.example1.Girl">

  <arg>'Aya Matsuura'</arg>

  <arg>oreju</arg>

  <aspect pointcut="kiss">wordsOfKisser</aspect>

 </component>

</components>

kissメソッドにポイントカットを設定



で、実行結果は、

Aya Matsuura said "Close your eyes.... "


Oreju was kissed by Aya Matsuura !!


And, Aya Matsuura said "I love you."

トラックバック - http://seasarproject.g.hatena.ne.jp/skimura/20040518
 | 
日記内検索(ヘッダまで戻らなくていいから、便利?)

このコンテンツは、投げ銭を受けつています。
@payの後払い