ITCAST视频-Spring学习笔记(使用CGLIB实现AOP功能与AOP概念解释)

 

感谢ITCAST发布的免费视频

 

在类没有提供接口的情况下,这时候需要用到一个第三方的CGLIB

import java.lang.reflect.Method;

 

import com.inventec.service.impl.PersonServiceBean;

 

import net.sf.cglib.proxy.Enhancer;

import net.sf.cglib.proxy.MethodInterceptor;

import net.sf.cglib.proxy.MethodProxy;

 

public class CGlibProxyFactory implements MethodInterceptor{

    private Object targetObject;

   

    public Object createProxyInstance(Object targetObject) {

       this.targetObject = targetObject;

      

       Enhancer enhancer = new Enhancer();

      

       enhancer.setSuperclass(this.targetObject.getClass());//override the methods which are not final of the target object

       enhancer.setCallback(this);

       return enhancer.create();

    }

 

    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {

       // TODO Auto-generated method stub

       PersonServiceBean bean = (PersonServiceBean) this.targetObject;

       Object result = null;

      

       if (bean.getUser() != null) {

           result = methodProxy.invoke(targetObject, args);

       }

      

       return result;

    }

}

 

分三步:

1.       创建Enhancer

2.       设置目标对象为超类

3.       创建对象

这样就产生了一个目标对象的子类

 

可以在调用方法前,后,以及出现例外时处理,无论抛不抛异常都会执行的方法

分别为前置通知,后置通知,例外通知,最终通知

 

还有一种叫做环绕通知,可以决定是否决定业务方法。

 

AOP中的概念

Aspect(切面):指横切性关注点的抽象即为切面,它与类很相似,只是两者的关注点不一样,类是对物体特征的抽象,而切面是横切性关注点的抽象。

 

Joinpoint(连结点):所谓连结点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连结点,实际上joinpoint还可以是field或类构造器。

 

Pointcut(切入点):所谓切入点是指我们要对那些joinpoint进行拦截的定义。

 

Advice(通知):所谓通知是指拦截到joinpoint之后要做的事情就是通知。通知分为前置通知,后置通知,异常通知,最终通知,环绕通知。

 

Target(目标对象):代理的目标对象。

 

Weave(织入):指将aspects应用到target对象并导致proxy对象创建的过程为织入。

 

Introduction(引入):再不修改类代码的前提下,Introduction可以在运行期为类动态添加一些方法或Field.

你可能感兴趣的:(spring)