Typickým příkladem využití AOP funkcionality rámce Spring™ pro poskytnutí deklarativních služeb spravovaným objektům je deklarativní transakční management.
Zabíháme teď sice trochu do tématu podpory datové vrstvy rámcem Spring™, kterému se budou věnovat navazující diplomové práce, ale předvedeme si jen stručný příklad s důrazem na jeho význam pro pochopení AOP funkcionality rámce Spring.
Vzhledem k tomu, že v přiložené vzorové aplikaci používáme na datové vrstvě ORM nástroj Hibernate™, tak i následující příklad využívá definice tříd specifických pro podporu rámce Spring právě tomuto nástroji.
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributeSource">
<value>
cz...MailManager.sendActivation*=PROPAGATION_REQUIRED
cz...MailManager.sendEmailWithNewCompetitorLoginData=PROPAGATION_MANDATORY
cz...MailManager.sendEmail=PROPAGATION_REQUIRED,-MyCheckedException</prop>
</value>
</property>
</bean>
<bean id="mailManager"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces"
value="cz.morosystems.sportportal.managers.MailManager" />
<property name="target" ref="mailManagerTarget"/>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<value>sampleAdvisor</value>
</list>
</property>
</bean>
V zájmu využít předchozích příkladů, kde
figuruje servisní třída MailManager, jsme
aplikovali deklarativní transakční management na tuto třídu. To má ovšem
smysl pouze v případě, že tato servisní třída pracuje s
Hibernate™ DAO vrstvou, což tedy tiše předpokládáme.
Na příkladu také vidíme, že Hibernate transakční
manažer se odvolává na objekt
sessionFactory, který nás ovšem momentálně nezajímá.
Jinak princip aplikace transakčního pokynu reprezentovaného třídou
TransactionInterceptor je stejný jako u všech
ostatních pokynů. Pro aplikaci definovaných transakčních pravidel na
konkrétní servisní třídu je opět nutno pokyn zařadit mezi pokyny AOP
proxy objektu této servisní třídy.
Jak už bylo řečeno, konkrétní význam definovaných pravidel bude
vysvětlen v navazujících diplomových pracích. Popsané i některé
pokročilé možnosti AOP modulu rámce Spring lze včetně dalšího popisu
nalézt v přiložené vzorové aplikaci, konkrétně v konfiguračním souboru
WEB-INF\spring\applicationContext-business.xml.