package aop.interceptor;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class LogPointCut {
@Pointcut("execution(* aop.service.SayHello.*(..))") // the pointcut expression
public void log() {
}
@Pointcut("execution(* aop.service.DoWork.*(..))") // the pointcut expression
public void work() {
}
}
package aop.interceptor;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.jboss.logging.Logger;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class LogInterceptor {
// Logger log = LoggerFactory.getLogger(LogInterceptor.class);
Logger log = Logger.getLogger(LogInterceptor.class);
// @Around("aop.interceptor.LogPointCut.log()&& args(invocation)")
@Around("aop.interceptor.LogPointCut.log()||aop.interceptor.LogPointCut.work()")
public Object invoke(ProceedingJoinPoint invocation) throws Throwable {
System.out.println("*********************Method " + "." + invocation.getTarget().getClass() + ": invocation=["
+ invocation + "]");
Object rval = invocation.proceed();
System.out.println("Invocation returned");
return rval;
}
@Before("aop.interceptor.LogPointCut.work()")
public void logSay(JoinPoint jp) {
System.out.println("********************* before (" + jp.getTarget() + ") is invoked !");
}
}
package aop.service;
import org.springframework.stereotype.Component;
@Component
public class DoWork {
public int provideStatus(String name) {
System.out.println(name + " has completed");
return 0;
}
}
package aop.service;
public interface ISayHello {
void sayTo(String name);
void sayBye(String name);
}
package aop.service;
import org.springframework.stereotype.Component;
@Component
public class SayHello implements ISayHello {
@Override
public void sayTo(String name) {
System.out.println("hello " + name);
}
@Override
public void sayBye(String name) {
System.out.println("Good bye " + name);
}
}
package aop;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.aspectj.EnableSpringConfigured;
@Configuration
@EnableAspectJAutoProxy
@ComponentScan("aop.service, aop.interceptor")
// proxy-target-class//ProxyFactoryBean
public class AppConfig {
}
package aop;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import aop.service.DoWork;
import aop.service.ISayHello;
public class AOPMain {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(AppConfig.class);
ctx.refresh();
ISayHello s = (ISayHello) ctx.getBean("sayHello");
s.sayTo("greatday");
DoWork d = (DoWork) ctx.getBean("doWork");
d.provideStatus("blue sky");
}
}