AOP(Aspect Orient Programming) 也就是面向切面的编程,是从动态角度考虑程序运行过程。包括前置通知和后置通知。
作用:通常使用AOP来处理一些具有横切性质的系统性服务,比如事物管理,安全检查,缓存,对象池的管理。
spring中AOP代理由spring的IOC容器负责生成,管理,其依赖关系也有IOC容器负责管理,因此AOP代理可以直接使用容器中的其他Bean实例作为目标,这种关系可由IOC容器的依赖注入提供,是spring 默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了,当需要代理的类不是代理接口的时候,spring会自动切换CGLIB代理,也可以强制使用CGLIB
所需要的步奏
- 定义普通业务组件。
- 定义切入点,一个切入点可能横切多个业务组件。
- 定义增强处理,增强处理就是在 AOP 框架为普通业务组件织入的处理动作。
下面写一个简单的例子:
1.目标对象的接口
package com.boge.work;
public interface IWork {
public void addWork(String name);
}
2.目标类
package com.boge.work.impl;
import com.boge.work.impl;
public class WorkImpl implements IWork {
public void addWork(String name){
System.out.println("");
}
}
3.前置通知
package com.boge.Advice;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class BeforeAdvice implements MethodBeforeAdvice {
public void before(Method method,Object[] args,Object target)throws Thowable{
System.out.println("");
}
}
4.后置通知
package com.dragon.Advice;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
public class AfterAdvice implement AfterReturningAdvice{
public void afterReturning(Object returnValue ,Method method,
Object[] args,Object target) throwsThrowable{
System.out.println(";;;;.");
}
}
5.环绕通知
pacage com.boge.advice
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class CompareInterceptor implements MethodInterceptor{'
public Object invoke(MethodInterceptor invocation)throws Throwable{
Object result = null ;
String w_name = invocation.getArguments()[0].toString();
if(w_name.equals("dragon")){
result = invocation.proceed();
}else{
System.out.printaln("");
}}
result result;
}