イベントリスナーは、ばね3.0.5でイベントに注釈とeventListnerを用いて達成された、反射モードオブザーバです。
私たちの春-Webflowの例として、ホテル予約、実装を見て、次の手順を実行します
。1.イベントを作成します。
パブリッククラスBookingCreatedEventは延びApplicationEvent { プライベート静的最終長いのserialVersionUID = 3039313222160544111Lを、プライベート予約予約。公共BookingCreatedEvent(オブジェクトソース){ スーパー(ソース)。} 公共BookingCreatedEvent(オブジェクトソース、予約予約){ スーパー(ソース)。this.booking = 予約。} 公共予約getBooking(){ 戻り予約。}}
1
|
<code
class
=
"hljs java"
><span
class
=
"hljs-keyword"
> </span></code>
|
イベントはApplicationEventを継承する必要があります。
2、リスナーを確立
@Component
パブリッククラスBookingEventsListenerが実装ApplicationListener <BookingCreatedEvent> { プライベート静的最終ロガーログ= Logger.getLogger()。// リスナー实现公共のボイドonApplicationEvent(BookingCreatedEventイベント){log.debug( "bookingId:" + 。event.getBooking()のgetId()); // 何かをします}}
1
|
<code
class
=
"hljs java"
><span
class
=
"hljs-meta"
><span style=
"background-color: #ff6600; color: #99cc00;"
> </span></span></code>
|
リスナーはApplicationListenerを達成する必要があります。
BookingEventsListenerのみBookingCreatedEventイベントを聞くように、春3.0.5で、ジェネリック医薬品とApplicationListenerであることに注意してください。
さらなる成分は、いかなるばねが構成ファイルで指定されていないように、@Componentを登録するために使用することができます。
3、トリガイベント
@Service( "bookingService" )
@Repository パブリッククラスJpaBookingServiceは実装BookingService、ApplicationContextAware { プライベートApplicationContextのコンテキストを、公共ボイドsetApplicationContext(ApplicationContextのApplicationContextの)はスローBeansException {log.debug( "AutowiredのApplicationContextを" )。this.context = のApplicationContext。} // 省略的代码@Transactional 公共ボイドpersistBooking(予約予約)スローHibernateExceptionで、のSQLException {em.persist(予約)。log.debug( "火BookingCreatedEvent" ); BookingCreatedEvent bookingCreatedEvent =
新しいBookingCreatedEvent(これ、予約)。// 触发イベントこの.context.publishEvent(bookingCreatedEvent)。}}
1
|
<code
class
=
"hljs java"
><span
class
=
"hljs-meta"
> </span></code>
|
ApplicationContextAwareを達成するためのトリガは、ApplicationContextの導入のために、原因bookingServiceも組み立て春、システムが起動するときに、ApplicationContextのは、注入されました。また、以下のようにApplicationContextの中に直接注入してもよいです。
@Autowired
民間のApplicationContextのApplicationContext。
1
|
<code
class
=
"hljs css"
> </code>
|
したがって、このモデルイベントリスナーのメリットは何ですか、それは?たとえば、ゲストがゲストに電子メールを送信するシステムの後にホテルをご予約の場合、我々はのは、何かを聴取者に電子メールを送信するためにコードを追加することができます。
私たちは春になった@Componentリスナーの登録コンポーネントと話すの上、使用しています。このリスナーは、ランタイム時に切り離されています。
私たちは道を例プロファイルを登録し、リスナーた場合や、主な目的は、展開中に切り離されます。
実用的なアプリケーションでは、両方。
サービスとリスナーが同期している、ということにも注意することがあり、persistBookingは、登録された@Transactionalの場合にはサービスであり、リスナーをpersistBookingで何かしてサービスを行うのと同じtansactionです。
あなたは、非同期実行する場合は、MQまたはデータベースを通る通過の必要性。
イベントリスナーは、ばね3.0.5でイベントに注釈とeventListnerを用いて達成された、反射モードオブザーバです。
私たちの春-Webflowの例として、ホテル予約、実装を見て、次の手順を実行します
。1.イベントを作成します。
パブリッククラスBookingCreatedEventは延びApplicationEvent { プライベート静的最終長いのserialVersionUID = 3039313222160544111Lを、プライベート予約予約。公共BookingCreatedEvent(オブジェクトソース){ スーパー(ソース)。} 公共BookingCreatedEvent(オブジェクトソース、予約予約){ スーパー(ソース)。this.booking = 予約。} 公共予約getBooking(){ 戻り予約。}}
1
|
<code
class
=
"hljs java"
><span
class
=
"hljs-keyword"
> </span></code>
|
イベントはApplicationEventを継承する必要があります。
2、リスナーを確立
@Component
パブリッククラスBookingEventsListenerが実装ApplicationListener <BookingCreatedEvent> { プライベート静的最終ロガーログ= Logger.getLogger()。// リスナー实现公共のボイドonApplicationEvent(BookingCreatedEventイベント){log.debug( "bookingId:" + 。event.getBooking()のgetId()); // 何かをします}}
1
|
<code
class
=
"hljs java"
><span
class
=
"hljs-meta"
><span style=
"background-color: #ff6600; color: #99cc00;"
> </span></span></code>
|
リスナーはApplicationListenerを達成する必要があります。
BookingEventsListenerのみBookingCreatedEventイベントを聞くように、春3.0.5で、ジェネリック医薬品とApplicationListenerであることに注意してください。
さらなる成分は、いかなるばねが構成ファイルで指定されていないように、@Componentを登録するために使用することができます。
3、トリガイベント
@Service( "bookingService" )
@Repository パブリッククラスJpaBookingServiceは実装BookingService、ApplicationContextAware { プライベートApplicationContextのコンテキストを、公共ボイドsetApplicationContext(ApplicationContextのApplicationContextの)はスローBeansException {log.debug( "AutowiredのApplicationContextを" )。this.context = のApplicationContext。} // 省略的代码@Transactional 公共ボイドpersistBooking(予約予約)スローHibernateExceptionで、のSQLException {em.persist(予約)。log.debug( "火BookingCreatedEvent" ); BookingCreatedEvent bookingCreatedEvent =
新しいBookingCreatedEvent(これ、予約)。// 触发イベントこの.context.publishEvent(bookingCreatedEvent)。}}
1
|
<code
class
=
"hljs java"
><span
class
=
"hljs-meta"
> </span></code>
|
ApplicationContextAwareを達成するためのトリガは、ApplicationContextの導入のために、原因bookingServiceも組み立て春、システムが起動するときに、ApplicationContextのは、注入されました。また、以下のようにApplicationContextの中に直接注入してもよいです。
@Autowired
民間のApplicationContextのApplicationContext。
1
|
<code
class
=
"hljs css"
> </code>
|
したがって、このモデルイベントリスナーのメリットは何ですか、それは?たとえば、ゲストがゲストに電子メールを送信するシステムの後にホテルをご予約の場合、我々はのは、何かを聴取者に電子メールを送信するためにコードを追加することができます。
私たちは春になった@Componentリスナーの登録コンポーネントと話すの上、使用しています。このリスナーは、ランタイム時に切り離されています。
私たちは道を例プロファイルを登録し、リスナーた場合や、主な目的は、展開中に切り離されます。
実用的なアプリケーションでは、両方。
サービスとリスナーが同期している、ということにも注意することがあり、persistBookingは、登録された@Transactionalの場合にはサービスであり、リスナーをpersistBookingで何かしてサービスを行うのと同じtansactionです。
あなたは、非同期実行する場合は、MQまたはデータベースを通る通過の必要性。