Spring+Aspectj AOP 全註解示例

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");
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章