Chceme-li vytvořený aspekt použít v naší aplikaci, musíme nejdřív zajistit, aby se aspekt zařadil do řetězce zpracování metod našich tříd. Toho se v rámci Spring dosahuje tak, že pro cílový objekt (target object), tedy instanci naší třídy, je vytvořen tzv. AOP proxy objekt, jenž obaluje cílový objekt a „vydává“ se za objekt původní, při tom však už jde o kombinaci cílového objektu a aplikovaného pokynu. AOP proxy objekty lze vytvářet dvěma způsoby:
První řešení je upřednostňováno, neboť nevnáší do výsledné aplikace další závislost na externí knihovně. Lze tak ovšem pracovat pouze s cílovými objekty implementujícími nějaké rozhraní. Vytvořený AOP proxy objekt pak lze přetypovat pouze na toto rozhraní, nikoli na konkrétní třídu cílového objektu.
Použití CGLIB™ umožňuje aplikaci aspektů i na konkrétní třídy.
Tvorba AOP proxy objektů za použití
standardních dynamických proxy je v rámci
Spring™ realizována prostřednictvím třídy
org.springframework.aop.framework.ProxyFactoryBean.
Uveďme si příklad využívající výše definovaný aspekt a dříve uvedenou
(oddíl „Odesílání e-mailů“) servisní třídu
MailManagerImpl:
<bean id="mailManagerTarget"
class="cz.morosystems.sportportal.managers.MailManagerImpl">
<property name="mailSender" ref="mailSender"/>
<property name="commonFrom" value="info@seznam.cz" />
</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>sampleAdvisor</value>
</list>
</property>
</bean>
<bean id="nejakyKontroler" class="....NejakyKontroler">
<property name="mailManager" ref="mailManager" />
</bean>
Původní deklarace manažerského objektu třídy
MailManagerImpl je zde zmiňovaným cílovým
objektem. Třetí definicí v příkladu je kontroler, který má vlastnost
(JavaBeans property) třídy MailManager. Dosud byl
propojen přímo s cílovým objektem třídy
MailManagerImpl, ovšem chceme-li aplikovat na
toto rozhraní náš aspekt, musíme přinutit kontroler používat obalující
AOP proxy objekt. A to je právě úkolem instance třídy
ProxyFactoryBean, která představuje
tovární objekt (factory object) aplikující seznam
zadaných pokynů (v našem případě pouze jeden) v definovaném pořadí na
specifikovaný cílový objekt. Tento tovární objekt vytvoří novou
dynamickou proxy, která implementuje seznam rozhraní specifikovaných
atributem proxyInterfaces. Výsledkem tedy je, že
kontroler získá odkaz na nově vytvořený AOP proxy objekt a pracuje s ním
prostřednictvím rozhraní MailManager.
Zavoláme-li v kontroleru metodu
sendActivationEmail, tak bude nejdříve dotázána
definice cílů, zda se má aplikovat specifikovaný pokyn. V případě kladné
odpovědi bude vyvolána metoda invoke pokynu a
skrze ni pak i cílová metoda
sendActivationEmail cílového objektu třídy
MailManagerImpl.