Aspect Oriental Program 面向切面编程
在我参考一些资料后,有一个解释,在我看来是最直观且容易理解的:
在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。
所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务;所谓的周边功能,比如性能统计,日志,事务管理等等
周边功能在Spring的变相切面编程AOP思想里,即被定义为切面。在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发,然后把切面功能和核心业务功能 "编织" 在一起,这就叫AOP。
这篇文章只是简单的对AOP注解的总结。
@Before 前置切入
@After 后置切入
@Around(环绕切入)
@AfterReturning (后置返回切入)
@AfterThrowing (后置异常切入)
下面的例子中baby是个类,包含有eatLunch,eatbreakfast,eatSupper,drink方法
1.
@Before("execution(* baby.*(..))")
//匹配baby类所有方法
public void beforEat(){
System.out.println("-------------前置切入,吃饭前洗手-----------");
}
2.
@After("execution(* eatLunch(..))")
//匹配eatLunch方法
public void afterEat(){
System.out.println("-------------后置切入,吃完午饭要午睡-----------");
}
3.
@Around("execution (* eatSupper(..))")
//匹配eatSupper方法
public Object aroudEat(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("-------------环绕切入,吃晚饭前play-----------");
Object baby = pjp.proceed();
System.out.println("-------------环绕切入,吃完晚饭sleep-----------");
return baby;
}
4.
@AfterReturning(returning="drink",pointcut=("execution (* drink(..))"))
public void lod(Object drink){
System.out.println("-------------这是AfterReturning增强-----------");
System.out.println("baby每天喝的饮料"+drink);
System.out.println("记录每天喝的容量");
}
异常返回切入并没有使用,所以就没写,所有的切入param(参数),都会在execution后,第一个*后是有空格的,若后面跟方法体就像这样* drink(..),若后面跟类就像* baby.*
这篇文章只是对AOP粗略的理解,文章有参考http://blog.csdn.net/evankaka。
Learning by Doing