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")
このアノテーションを用いて、各メール設定値用アノテーションに値を設定します。
メールプロパティ
メール設定値用に下記のアノテーションが用意されています。
アノテーション | 指定出来る型、アノテーション |
@Subject | String |
@From | @MailAddr |
@To | @MailAddrおよびその配列 |
@Cc | @MailAddrおよびその配列 |
@Bcc | Stringおよびその配列 |
@ReplyTo | @MailAddr |
@ReturnPath | String |
@Subjectはもとより、@Bccと@ReturnPathは名前をセット出来ない(意味がない)ので、Stringになってます。
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のコンポーネント登録を記述する必要がなくなります。
|