1. 程式人生 > >spring中aop的前值增強

spring中aop的前值增強

join 分享圖片 start ide ssp obj 並且 sys 連接點

Spring AOP的幾個概念

1.切面(Aspect):切面就是一個關註點的模塊化,如事務管理、日誌管理、權限管理等;
2.連接點(Joinpoint):程序執行時的某個特定的點,在Spring中就是一個方法的執行;
3.通知(Advice):通知就是在切面的某個連接點上執行的操作,也就是事務管理、日誌管理等;
4.切入點(Pointcut):切入點就是描述某一類選定的連接點,也就是指定某一類要織入通知的方法;
5.目標對象(Target):就是被AOP動態代理的目標對象;

spring中包括前置增強、後置增強、和環繞增強等,而前置增強,我們可以討論一下他們的使用:

我的代碼如下:

定義一個接口IHello.java

package Spring;

public interface IHello { //定義一個接口
public void hello(String name);

}

創建一個類實現接口HelloSpacker.java

package Spring;

public class HelloSpacker implements IHello{

//繼承該接口,並且實現接口的方法

@Override
public void hello(String name){
System.out.println("hello,"+name);
}
}

創建一個類實現前值增強LogBeforeAdvice.java

package Spring;

import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.springframework.aop.MethodBeforeAdvice;

public class LogBeforeAdvice implements MethodBeforeAdvice{
//繼承MethodBeforeAdvice,前值增強設計為一個獨立的類
private Logger logger=Logger.getLogger(this.getClass().getName());


@Override
public void before(Method method,Object[] arg, Object target) //前置增強實現的方法
throws Throwable {
logger.log(Level.INFO,"method start..."+method);
} //前置增強
}

配置文件spring.xml

技術分享圖片

測試類SpringDemo.java

package Spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringDemo {
public static void main(String[] args) {
@SuppressWarnings("resource")
ApplicationContext context=new ClassPathXmlApplicationContext("Spring.xml");
IHello helloProxy=(IHello)context.getBean("helloProxy");
helloProxy.hello("Justin!!!");

}
}

後置增強的代碼,實現AfterReturningAdvice接口

public class LogAfterAdvice implements AfterReturningAdvice{
Logger logger=Logger.getLogger(this.getClass().getName());

@Override
public void afterReturning(Object object, Method method,Object[] target,
Object args) throws Throwable {
logger.log(Level.INFO,"Methdo ends..."+method);

}
}

測試代碼結果

技術分享圖片

spring中aop的前值增強