Seasar DI Container with AOP

Tigerアノテーション

S2Maiは、定数アノテーションと同等の機能を持ったTigerアノテーションも提供しています。

Tigerアノテーションを使う場合は、s2mai-tiger-xxx.jarをクラスパスに含めて下さい。s2mai-tigerの配布zipには他のjarもありますが、開発・テスト時に必要となるものなので、実行時には特に必要ではありません。

使用例

定数アノテーションを下記のように使ったとします。

public interface TestMai {
    static final String FROM = "hoge@foo.com";
    
    static final MailAddress TO = new MailAddress("rokugen@example.com","六");
    
    static final MailAddress[] sendMail2_TO = 
        new MailAddress[]{new MailAddress("foo@example.com","ふー"),new MailAddress("bar@example.com","ばー")};
        
    static final MailAddress sendMail3_BCC = new MailAddress("fuga@example.com","ふが");
    
    void sendMail(TestDto dto);
    
    void sendMail2(TestDto2 dto);
    
    void sendMail3(TestDto3 dto);
}

これをTigerアノテーションに置き換えてみます。

@From(@MailAddr(address="hoge@foo.com"))
@To(@MailAddr(address="rokugen@example.com", personal="六"))
public interface TestMai {
    
    void sendMail(TestDto dto);
    
    @To({@MailAddr(address="foo@example.com", personal="ふー"), @MailAddr(address="bar@example.com", personal="ばー")})
    void sendMail2(TestDto2 dto);
    
    @Bcc("fuga@example.com");
    void sendMail3(TestDto3 dto);
}

こうなります。Mai共通に適用する場合はinterface型宣言の上、特定のメソッドに適用する場合はメソッドの上に書きます。

また、Tigerアノテーションと定数アノテーションの混在も可能です。

解説

@MailAddr

メールアドレスと名前を保持するアノテーションです。addressにメールアドレス、personalに名前を指定します。personalは省略可です。

@MailAddr(address="rokugen@example.com", personal="六")
@MailAddr(address="foo@example.com")

このアノテーションを用いて、各メール設定値用アノテーションに値を設定します。

メールプロパティ

メール設定値用に下記のアノテーションが用意されています。

アノテーション指定出来る型、アノテーション
@SubjectString
@From@MailAddr
@To@MailAddrおよびその配列
@Cc@MailAddrおよびその配列
@BccStringおよびその配列
@ReplyTo@MailAddr
@ReturnPathString

@Subjectはもとより、@Bccと@ReturnPathは名前をセット出来ない(意味がない)ので、Stringになってます。

SMART deployのための設定

S2Maiは、SMART deployに対応しています。

まず、app.diconにincludeを追加します。

app.dicon
<include path="s2mai.dicon"/>

次に、creator.diconに下記を追加します。

creator.dicon
<component class="org.seasar.mai.creator.MaiCreator" />

そして、customizer.diconに下記を追加します。

customizer.dicon
<component name="maiAspectCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer">
    <property name="interceptorName">"s2mai.s2MaiInterceptor"</property>
</component>

<component name="maiCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"> <initMethod name="addCustomizer"> <arg>defaultCustomizer</arg> <!-- これは任意ですが、大概traceInterceptorになってると思います --> </initMethod> <initMethod name="addCustomizer"> <arg>maiAspectCustomizer</arg> </initMethod> </component>
これでSMART deployが有効になります。規約は以下になります。
  • Maiインタフェースの名前が「Mai」で終わる
  • Maiインタフェースが、convention.diconで設定したルートパッケージの直下の「mai」という名前のパッケージ内にある

例えば、ルートパッケージが「com.example」の場合、「com.example.mai.TestMai」というインタフェースはMaiのコンポーネントとして認識されます。

以上の規約に従えば、Maiのコンポーネント登録を記述する必要がなくなります。