読者です 読者をやめる 読者になる 読者になる

ぺーぺーSEのブログ

備忘録・メモ用サイト。

Java、Springのアノテーションめも

SpringアノテーションJavaと並べてまとめ







クラス対象のアノテーション

Springアノテーション
  • @Component
    • SpringDIコンテナにbeanとして登録したいクラスへ付与する
    • bean定義ファイル(.xml)のタグと同じ働き
    • bean名をつけたいときは下記のようにする
      • @Component("name")
    • このアノテーションを使うとこはbean定義ファイルに「」を記述しておくこと
  • @Service
    • @Componentと基本的には同じ働きをするが、Service層(ビジネスロジック等)を対象としている
    • Service層とその他のbeanの違いを明確にするために使用する
    • このアノテーションを使うとこはbean定義ファイルに「」を記述しておくこと
  • @Repository
    • @Componentと基本的には同じ働きをするが、Persistence層(DAO等のDBアクセスを行うクラス)を対象としている
    • Persistence層とその他のbeanの違いを明確にするために使用する
    • このアノテーションを使うとこはbean定義ファイルに「」を記述しておくこと
  • @Controller
    • @Componentと基本的には同じ働きをするが、SpringMVCでControllerの役割となるクラスに付与する
  • @Scope
    • beanのスコープを設定する
      • @Scope("prototype")
  • @Transactional
トランザクションマネージャの定義例
★idは「transactionManager」である必要がある★
<bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"/>
</bean>

コンポーネントスキャンのオプション

    • base-package属性で指定したパッケージからスキャン対象を指定する。指定方法は「アノテーション」「タイプ」「正規表現」「aspectJ表記」「TypeFilter実装クラス」から選べる。
    • base-package属性で指定したパッケージからスキャン対象外とする。指定方法はと同様。
  • use-default-filters
    • base-package配下をすべてスキャン対象とするかを指定する。trueの場合、すべてが対象となる。
  • name-generator
例
<context:component-scan base-package="jp.hoge" use-default-filters ="false" name-generator="jp.hoge.fuge.NameGenerator">
  <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

の属性

  • transaction-manager
    • トランザクションマネージャの名前を指定する。デフォルトで"transactionManager"が適用される。
  • proxy-target-class
    • プロキシを利用してアスペクトを適用する場合には「true」を指定する。
  • order
    • アドバイスの適用順を指定する場合に定義する。数字の小さい順に定義されたアドバイスが処理される。
  • mode

フィールド対象のアノテーション

Springアノテーション
  • @Autowired
    • 自動でフィールドにbeanをインジェクションする
    • フィールドの型(インターフェース)の実装クラスのbeanを自動的にインジェクションする
    • フィールドの型(インターフェース)の実装クラスのbeanが複数個ある場合は使用できないが、それでも使いたい場合は@Qualifierと併用する
    • このアノテーションを使うとこはbean定義ファイルに「 」を記述しておくこと
    • このアノテーションを使うとこはbean定義ファイルに「」を記述しておくこと
    • メソッドにも使用することができる
    • このアノテーションは必須でインジェクションするためbeanが存在しない場合はエラーとなる
    • エラーとしないための設定は下記
      • @Autowired(required=false)
  • @Qualifier
    • @Autowiredと併用する
    • @Autowiredでbean名を指定したい場合に使用する
    • フィールドに対して「@Autowired」と「@Qualifier("name")」を両方つける
  • @Value
    • bean名を指定してフィールドにbeanをインジェクションする
    • @Value("name")
Javaアノテーション
  • @Inject
    • Springの@Autowiredと同じ機能
  • @Resource
    • bean名を指定してフィールドにbeanをインジェクションする
      • @Resource(name="name")
    • Springでこのアノテーションを使うとこはbean定義ファイルに「 」を記述しておくこと
    • フィールド名のDIコンテナに登録したbean名が同じ場合はbean名指定省略可能
    • setterメソッドにも使用することができる
    • Springの@Autowired+@Qualifierと思えばよい
      • @Autowiredの方が@Resourceより細やかな設定が可能なようだ

メソッド対象のアノテーション

Springアノテーション
  • @Required
    • setterメソッド対象
    • インジェクション必須であることを表す
    • beanが設定されていない場合は初期化時にエラーになる
Javaアノテーション
  • @PostConstruct
    • インジェクション後のBeanの初期化メソッドに設定する
  • @PreDestroy
    • インジェクション後のBeanの廃棄メソッドに設定する

Spring2.5.6SEC01で確認。Spring3系でもたぶん大丈夫。

Java(EE)系アノテーションまとめ

CDI

  • @Named
    • javax.inject
    • Inject対象管理
    • Inject管理対象としてマーク。
  • @Inject
    • javax.inject
    • Inject対象管理
    • Inject先のフィールド、Injectするための特殊処理を挟むメソッドを指定する。
  • @Qualifier
    • javax.inject
    • Inject対象管理
    • InjectとProducesを結びつけるマッピング
  • @Produces
    • javax.enterprise.inject
    • Inject対象管理
    • Inject元のィールド、Inject元を生成するメソッドを指定する。
  • @Disposes
    • javax.enterprise.inject
    • Inject対象管理
    • 破棄される時に呼ばれるのを指定。
  • @ApplicationScoped
    • javax.enterprise.context
    • Injectスコープ管理
    • アプリケーション単位での生成と破棄。
  • @SessionScoped
    • javax.enterprise.context
    • Injectスコープ管理
    • セッション単位での生成と破棄。
  • @RequestScoped
    • javax.enterprise.context
    • Injectスコープ管理
    • リクエスト単位での生成と破棄。
  • @ConversationScoped
    • javax.enterprise.context
    • Injectスコープ管理
    • 業務単位での生成と破棄。
  • @Dependent
    • javax.enterprise.context
    • Injectスコープ管理
    • Injectされる元に依存した生成と破棄。
  • @NormalScoped
    • javax.enterprise.context
    • Injectスコープ管理
    • 新しいスコープを定義するために使う。

CommonAnnotations

  • @PostConstruct
    • javax.annotation
    • Inject生成管理
    • Inject生成完了した時に行う処理。
  • @PreDestroy
    • javax.annotation
    • Inject生成管理
    • Inject破棄する前に行う処理。

JPA

  • @Entity
    • javax.persistence
    • 永続化管理
    • EntityManagerの管理対象としてマーク。
  • @Id
    • javax.persistence
    • 永続化管理
    • 主キーを指定する。ID指定された対象のEntityが複合主キーを持っている場合は、ばらしたフィールドを別途用意して、@Idをつける必要がある。Id関連は@Columnとかで名前を指定した方が良いかも。@JoinColumnとか必要になってくるし。
  • @OneToMany
    • javax.persistence
    • 関連数指定
    • 1対多の関係のあるフィールドに指定する。主にListのフィールドに指定する。相手側からの依存が基本の場合はmappedBy属性を指定する。
  • @ManyToOne
    • javax.persistence
    • 関連数指定
    • 多対1
  • @OneToOne
    • javax.persistence
    • 関連数指定
    • 1対1
  • @ManyToMany
    • javax.persistence
    • 関連数指定
    • 多対多
  • @MapKey
    • javax.persistence
    • 関連指定
    • 主にMapなフィールドに指定する。※詳細は確認してない。
  • @Embeddable
    • javax.persistence
    • テーブルマッピング
    • フィールドの形で同じテーブルに組み込むための定義側指定。@PrePersist等は動かない。@MappedSuperclassと@Entityのみで動作する。
  • @Embedded
    • javax.persistence
    • テーブルマッピング
    • フィールドの形で同じテーブルに組み込むための指定。
  • @MappedSuperclass
    • javax.persistence
    • テーブルマッピング
    • これを定義したクラスをEntityで継承すると継承元も永続化対象になる。@Embed〜系と違って、@PrePersistを定義しておくと動作する。
  • @PrePersist
    • javax.persistence
    • 永続化対象管理
    • Insert前に行う処理を指定。
  • @PreUpdate
    • javax.persistence
    • 永続化対象管理
    • Update前に行う処理を指定。
  • @Temporal
    • javax.persistence
    • 詳細指定
    • 日付系に指定する。
  • @OrderBy
    • javax.persistence
    • 詳細指定
    • 順序指定。
  • @Transient
    • javax.persistence
    • 詳細指定
    • 永続化対象外マーク。

JSF

  • @ManagedBean
    • javax.faces.bean
    • 画面対象管理
  • @ManagedProperty
    • javax.faces.bean
    • 画面対象管理
  • @ApplicationScoped
    • javax.faces.bean
    • スコープ管理
  • @SessionScoped
    • javax.faces.bean
    • スコープ管理
  • @RequestScoped
    • javax.faces.bean
    • スコープ管理
  • @ViewScoped
    • javax.faces.bean
    • スコープ管理
  • @CustomScoped
    • javax.faces.bean
    • スコープ管理
  • @NoneScoped
    • javax.faces.bean
    • スコープ管理
  • @FacesConverter
    • javax.faces.convert
    • 画面管理
    • 独自クラスをプルダウンとかチェックボックスとかに使う場合の定義に使用する。
  • @FacesValidator
    • javax.faces.validator
    • 画面管理
    • 独自の入力のチェックを定義する。フロントエンド用。

参考:
http://memory.empressia.jp/article/35308474.html
Spring2.5のアノテーション
http://itpro.nikkeibp.co.jp/article/COLUMN/20090604/331310/