AOP原理

从Spring的AOP框架介绍中得知

1. 对于使用接口的类,Spring使用JDK动态代理(原来做项目中试图从Bean强制转换为实现类,结果报错,原来是这么回事)。
     import java.lang.reflect.InvocationHandler;
     import java.lang.reflect.Method;

2. 没有接口的就使用别的AOP框架aspectj.

但这些都是依赖于Java字节码工具ASM生成一个原类的新类,调用Callback

3. CGlib动态代理例子
/**
*CGlib采用非常底层的字节码技术,可以为一个类创建子类,
并在子类中采用方法拦截技术拦截父类方法的调用,并顺势进行增强,即是织入横切逻辑
* @author tufu
*/
public class CglibProxy implements MethodInterceptor{
    private Enhancer enhancer = new Enhancer();
    //覆盖MethodInterceptor接口的getProxy()方法,设置
    public Object getProxy(Class clazz){
        enhancer.setSuperclass(clazz); //设者要创建子类的类
        enhancer.setCallback(this); //设置回调的对象
        return enhancer.create(); //通过字节码技术动态创建子类实例,
    }

    public Object intercept(Object obj,Method method,Object[] args,
            MethodProxy proxy) throws Throwable {
        System.out.println("模拟代理增强方法");

        //通过代理类实例调用父类的方法,即是目标业务类方法的调用
        Object result = proxy.invokeSuper(obj, args);

        System.out.println("模拟代理增强方法结束");
        return result;
    }
}

你可能感兴趣的:(java,spring,AOP,框架,bean)