spring簡單回顧二

spring簡單回顧二

JDK做代理的前提是被代理對象具有接口,通過代理對象實現被代理對象的接口來進行代理

CGLib則沒有這方面的要求,下面看下CGLib的實現:

package com.li.info.manager;

 

import java.lang.reflect.Method;

 

import net.sf.cglib.proxy.Enhancer;

import net.sf.cglib.proxy.MethodInterceptor;

import net.sf.cglib.proxy.MethodProxy;

 

public class CGLibProxyObjectFactory implements MethodInterceptor {

   

    private Object targetObject;

   

    public Object createProxyInstance (Object targetObject) {

       this.targetObject = targetObject;

      

       Enhancer enhancer = new Enhancer(); // 該類用於生成代理對象

       enhancer.setSuperclass(this.targetObject.getClass()); // 設置父類

       enhancer.setCallback(this); // 設置調用對象爲本身

       return enhancer.create();

    }

 

    public Object intercept(Object proxy, Method method, Object[] args,

           MethodProxy methodProxy) throws Throwable {

       Object retVal;

       if (method.getName().equals("add")) {

           System.out.println("before method");  //前置

           retVal = methodProxy.invoke(targetObject, args);

           System.out.println("after method");

       }

       retVal = method.invoke(targetObject, args);

       return retVal;

    }

 

}

 

Aspect(切面):指橫切性關注點的抽象即爲切面,它與類相似,只是兩者的關注點不一樣,類是對物體特徵的抽象,而切面石堆橫切性關注點的抽象

jointpoint(連接點):所謂連接點是指那些攔截到的的點,在spring中,這些點指的是方法,因爲spring只支持方法類型的連接點,實際上joinpoint還可以是field或類構造器。

Pointcut(切入點):所謂切入點是指那些我們要對那些joinpoint進行攔截的定義。

Advice(通知):所謂通知是指攔截到jointpoint之前的即爲前置通知,之後的即爲後置通知,異常通知,最終通知,環繞通知。

Target(目標對象):代理的目標對象

Weave(織入):指將aspect應用到target對象並導致proxy對象創建的過程稱爲織入

Introduction(引入):在不修改類代碼的前提下,Introduction可以在運行期爲類動態地添加一些方法或Field

 

使用Spring進行面向切面(AOP)編程

Spring提供了兩種切面的使用方式,實際工作中我們可以選用其中一種:

基於XML配置方式進行AOP開發

基於註解方式進行AOP開發

方法一,基於註解方式聲明切面:

<aop:aspectj-autoproxy />

目的打開aopnnotation 註釋處理器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章