2017년 8월 29일 화요일

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

http://blog.pepese.com/entry/20120613/1339573480

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
トランザクション境界を設定する
メソッドへ適用することもできる
このアノテーションを使うとこはbean定義ファイルに」とトランザクションマネージャの定義を記述しておくこと
トランザクションマネージャの定義例
★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
アノテーションで自動登録されるbeanの名前を生成するクラスを指定する。

<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
SpringAOP、AspectJどちらのアノテーション定義を適用させる「proxy」、「aspectJ」から指定する。aspectJのload-time-weavingを定義する場合には「aspectJ」を選択する。
フィールド対象のアノテーション

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
画面管理
独自の入力のチェックを定義する。フロントエンド用。

댓글 없음:

댓글 쓰기