mirror of
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-08-22 05:59:42 +02:00
60 lines
1.5 KiB
Plaintext
60 lines
1.5 KiB
Plaintext
![]() |
import org.aspectj.lang.JoinPoint;
|
||
|
import org.aspectj.lang.Signature;
|
||
|
|
||
|
|
||
|
@Clientside
|
||
|
public aspect ServiceCall
|
||
|
{
|
||
|
|
||
|
public pointcut ServicePoint()
|
||
|
: call( * (@BussFacade *).*(..) )
|
||
|
&& !@within(Clientside)
|
||
|
&& !@annotation(Clientside)
|
||
|
&& ( !@within(ServiceImplementation)
|
||
|
|| @withincode(Clientside)
|
||
|
)
|
||
|
;
|
||
|
|
||
|
declare @type
|
||
|
: hasmethod(* (@BussFacade *).*(..)) : @ServiceImplementation
|
||
|
;
|
||
|
|
||
|
public @interface ServiceImplementation { }
|
||
|
|
||
|
|
||
|
private pointcut call_Service(Object businessFacade)
|
||
|
: ServicePoint()
|
||
|
&& target(businessFacade);
|
||
|
|
||
|
|
||
|
protected Object findImpl(Object bussFacade, JoinPoint.StaticPart location)
|
||
|
{
|
||
|
Class dienstID;
|
||
|
if ( null!=bussFacade )
|
||
|
dienstID = bussFacade.getClass();
|
||
|
else {
|
||
|
Signature sig = location.getSignature();
|
||
|
dienstID = sig.getDeclaringType();
|
||
|
}
|
||
|
Object impl = new MyServiceImpl(); // call ServiceLocator here
|
||
|
return impl;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
Object around(Object bussFacade)
|
||
|
: call_Service(bussFacade)
|
||
|
{
|
||
|
try {
|
||
|
Object umgelenkt = findImpl(bussFacade, thisJoinPointStaticPart);
|
||
|
Object res = proceed(umgelenkt);
|
||
|
return res;
|
||
|
}
|
||
|
catch(Throwable T) {
|
||
|
System.out.println("oh my");
|
||
|
throw new RuntimeException(T);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|