使用Spring註解方試實現AOP2--環繞通知(周圍通知)

 Spring XML文件的寫法與1中的一樣,請參考使用Spring註解方試實現AOP1

同樣的一相java類:

package com.sszd.db;

public class DbOpretor {
   
    public void insert(String sql)//帶參數
    {
        System.out.println("insert方法(帶參數)"+"/n");
    }
   
    public int select(int id)//帶返回值
    {
        System.out.println("select方法(有返回值)");
        return id;
    }
   
    public void commit()
    {
        System.out.println("commit方法"+"/n");
    }   
}

 

實現切面的類

package com.sszd.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class DbManage {
    @Pointcut("execution(* com.sszd.db..*.commit(..))")//在這裏,只對commit方法進行攔截
    public void perform(){}
  
    @Around("perform()")
    public void watchDb(ProceedingJoinPoint joinpoint) //這個方法需要一個特定的參數
    {
        System.out.println("Around 前:");
        try {
            joinpoint.proceed();
        } catch (Throwable e) {
            e.printStackTrace();
        }
        System.out.println("Around 後:");
    }
}
運行測試用例

package com.sszd.test;

import junit.framework.TestCase;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.sszd.db.DbOpretor;

public class AOPTest extends TestCase {

    public void testAop()
    {
        ApplicationContext cxt = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        DbOpretor db = (DbOpretor)cxt.getBean("DBBean");
        db.commit();
        db.insert("insert SQL");
        db.select(2);
    }
}

結果如圖:

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