1. 程式人生 > 其它 >spring純註解版aop編碼

spring純註解版aop編碼

技術標籤:筆記aopspring

目錄

配置bean

定義切面類

test測試使用

結果:


配置bean

import org.springframework.context.annotation.*;
@Configuration
//包掃描的註解
@ComponentScan(basePackages = {"domain","aop"})//掃描多個包
public  class AppConfig {
}

定義切面類

package aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;

//掃描自動例項化
@Component
//定義切面類
@Aspect
//代替 <aop:auto-proxy>標籤  jdk false[default] cglib true
@EnableAspectJAutoProxy(proxyTargetClass = false)
public class Around {

//    定義切入點
    @Pointcut("within(domain..*)")
    public void pointCut(){}
//引用切入點
//    該註解表示切入點和額外功能的組裝
    @org.aspectj.lang.annotation.Around("pointCut()")
    public Object arround(ProceedingJoinPoint joinPoint){
        Object ret= null;
        System.out.println("proxy before real method executing");
        try {
            ret = joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println("proxy after real method executing");
        return ret;
    }
}

test測試使用

ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = (UserService) ctx.getBean("userServiceImpl");
userService.login("tomas","1234");

結果: