In my understanding, the Aspect is only an aspect of oriented programming, and the adviser is Spring Framework jargon.
Perhaps this simple example will be useful:
Foo.java
public interface Foo { void foo(); void baz(); }
FooImpl.java
public class FooImpl implements Foo { @Override public void foo() { System.out.println("Foo!"); } @Override public void baz() { System.out.println("Baz!"); } }
MethodBeforeAdviceBarImpl.java
import org.springframework.aop.MethodBeforeAdvice; import java.lang.reflect.Method; public class MethodBeforeAdviceBarImpl implements MethodBeforeAdvice { @Override public void before(Method method, Object[] args, Object target) throws Throwable { System.out.println("Bar!"); } }
and finally App.java
import org.springframework.aop.MethodBeforeAdvice; import org.springframework.aop.framework.ProxyFactory; import org.springframework.aop.support.NameMatchMethodPointcutAdvisor; public class App { public static void main(String[] args) { final MethodBeforeAdvice advice = new MethodBeforeAdviceBarImpl(); final NameMatchMethodPointcutAdvisor nameMatchMethodPointcutAdvisor = new NameMatchMethodPointcutAdvisor(); nameMatchMethodPointcutAdvisor.setMappedName("foo"); nameMatchMethodPointcutAdvisor.setAdvice(advice); final ProxyFactory proxyFactory = new ProxyFactory(); proxyFactory.addAdvisor(nameMatchMethodPointcutAdvisor); final Foo foo = new FooImpl(); proxyFactory.setTarget(foo); final Foo fooProxy = (Foo) proxyFactory.getProxy(); fooProxy.foo(); fooProxy.baz(); } }
Running the main method in App.java outputs:
Bar! Foo! Baz!
So, as you see here, NameMatchMethodPointcutcutAdvisor is an Expert Advisor , and it consists of a mappedName, which is a pointcut and the advice itself, which in this case is MethodBeforeAdvice .
And in Jargon's aspect oriented programming, Aspect is Advice + Pointcut, so you go. Advisor seems to be Aspect in the end ..
Koray tugay
source share