1. 程式人生 > >Spring-Aop學習的前提——cglib代理

Spring-Aop學習的前提——cglib代理

這裡我們就簡單寫一個例子來看一下cglib代理:
首先先匯入cglib的jar包,cglib-nodep.jar,大家可以自行去官網下載即可。
首先建立一個介面:PersonDao

public interface PersonDao {
    public void savePerson();
}

建立介面的實現類:PersonDaoImpl

public class PersonDaoImpl implements PersonDao{
    @Override
    public void savePerson() {
        // TODO Auto-generated method stub
System.out.println("savePerson..........."); } }

事務類:

public class Transaction {
    public void beginTransaction() {
        System.out.println("begin Transaction");
    }
    public void commit() {
        System.out.println("commit...");
    }
}

建立攔截器MyInterceptor:

public class
MyInterceptor implements MethodInterceptor{
private Object target; //目標類 private Transaction transcation;//事務 public MyInterceptor(Object target, Transaction transcation) { super(); this.target = target; this.transcation = transcation; } /*產生代理物件*/ public Object createProxy
() { //程式碼增強類 Enhancer enhancer = new Enhancer(); enhancer.setCallback(this);//引數為攔截器 enhancer.setSuperclass(target.getClass());//生成的代理類的父類是目標類 return enhancer.create(); } @Override public Object intercept(Object obj, Method method, Object[] arg2, MethodProxy arg3) throws Throwable { // TODO Auto-generated method stub this.transcation.beginTransaction(); Object result = method.invoke(target, arg2); this.transcation.commit(); return result; }

測試類:

public class CglibProxyText {


    public void textCglib() {
        Object target = new PersonDaoImpl();
        Transaction transcation = new Transaction();
        MyInterceptor interceptor = new MyInterceptor(target, transcation);
        PersonDaoImpl personDaoImpl = (PersonDaoImpl) interceptor.createProxy();
        personDaoImpl.savePerson();
    }
    public static void main(String[] args) {
        CglibProxyText text = new CglibProxyText();
        text.textCglib();
    }
}

這裡要注意:通過cglib產生的代理物件,代理類是目標類的子類

相關推薦

Spring-Aop學習前提——cglib代理

這裡我們就簡單寫一個例子來看一下cglib代理: 首先先匯入cglib的jar包,cglib-nodep.jar,大家可以自行去官網下載即可。 首先建立一個介面:PersonDao public interface PersonDao { publ

spring aop原理 JDK動態代理CGLIB動態代理

lan ble -- 自定義 and ets spec gen ase Spring的兩大特性是IOC和AOPIOC負責將對象動態的註入到容器,從而達到一種需要誰就註入誰,什麽時候需要就什麽時候註入的效果。理解spring的ioc也很重要。但是今天主要來和大家講講aop。A

Spring AOP學習筆記04:AOP核心實現之建立代理

  上文中,我們分析了對所有增強器的獲取以及獲取匹配的增強器,在本文中我們就來分析一下Spring AOP中另一部分核心邏輯--代理的建立。這部分邏輯的入口是在wrapIfNecessary()方法中緊接著增強器的獲取之後的createProxy(): protected Object createProx

Spring AOP實驗之靜態代理

註入 ans 執行 軟件開發 動態代理 sin modified 實現 編譯 1 AOP的概念和原理 1.1 AOP原理   AOP(Aspect Oriented Programming),也就是面向方面編程的技術。AOP基於IoC基礎,是對OOP的有益補充。   

Spring aop學習整理(spring in action)(一):了解AOP

進入 一起 table return 問題 匹配 核心 before cti   切面能幫助我們模塊化橫切關註點。簡而言之,橫切關註點可以被描述為影響應用多處的功能。例如,安全就是一個橫切關註點,應用中的許多方法都會涉及到安全規則。圖4.1直觀呈現了橫切關註點的概念。  

Spring AOP學習

[] .com -s tca demo1 ng- cep pattern pre 什麽是AOP AOP 面向切面編程 采取橫向抽取機制,取代了傳統縱向繼承體系重復性代碼(性能監視、事務管理、安全檢查、緩存) Spring AOP使用純Java實現,不需要專門的編譯

AOP初步嘗試——cglib代理和jdk代理整合

一、代理機制 首先簡單描述一下代理機制。核心程式碼完成後,我們想給程式碼增加一些附加功能,比如日誌,攔截等,這時不應該去修改核心程式碼,我們可以通過獲取代理,在核心程式碼以外增加程式碼,實現相關功能。同樣在我們沒有原始碼或無法觸碰原始碼時,也是如此。核心功能與附加功能分開,互不干擾,稱之

Spring AOP 學習筆記

1、Spring AOP中的動態代理主要有兩種方式,JDK動態代理和CGLIB動態代理。JDK動態代理通過反射來接收被代理的類,並且要求被代理的類必須實現一個介面。JDK動態代理的核心是InvocationHandler介面和Proxy類。如果目標類沒有實現介面,那麼Spring AOP會選擇使

Spring AOP學習筆記(一):基礎概念

AOP產生背景 AOP(Aspect Oriented Programming),即面向切面程式設計,可以說是OOP(Object Oriented Programming,面向物件程式設計)的補充和完善。OOP引入封裝、繼承、多型等概念來建立一種物件層次結構,用於模擬公共行為的一個集合。不

轉:Spring AOP中的動態代理

原文連結:Spring AOP中的動態代理 0  前言 1  動態代理 1.1 JDK動態代理 1.2 CGLIB動態代理 1.2.1 CGLIB的代理用法 1.2.2 CGLIB的過濾功能

Spring AOP實現原理-動態代理

目錄 代理模式 靜態代理 動態代理 代理模式 我們知道,Spring AOP的主要作用就是不通過修改原始碼的方式、將非核心功能程式碼織入來實現對方法的增強。那麼Spring AOP的底層如何實現對方法的增強?實現的關鍵在於使用了代理模式 代理模式的作用就是為其它物件提供一種代理,以控制

Spring AOP的實現——動態代理機制

在java的動態代理中,有兩個重要的類或者介面,一個是InvocationHandler(Interface)、另一個是Proxy(Class),這一個類和介面是實現動態代理所必須的。 InvocationHandler:每一個動態代理類都必須實現InvocationHan

Spring AOP學習筆記(1):AOP基礎知識

一、 使用AOP前的經驗 在接觸AOP這種程式設計思想之前,我也有好多的編碼經歷,將業務邏輯和日誌、測試和驗證等其他需求放在一起的,這簡直是痛苦死了,每寫一個方法都得重複好多程式碼,而且這些程式碼有好多是類似的,但是不得不重寫,因為當時還是菜鳥(現在也是菜鳥),比如之前同組

[Spring]Spring AOP學習筆記(2)---5種切入方式、AOP優先順序及切面表示式的重用

Spring AOP學習筆記(2)---5種切入方式、AOP優先順序及切面表示式的重用 一、5種切入方式 學習了下Spring的AOP的五種切入方式,分別是: (1)Before ---在所攔截方法執行前執行; (2)After ---在所攔截方法執行後執行; (3)Aft

Spring AOP的底層實現-代理模式

在學習Spring的過程中,留下一下痕跡。 代理模式,其實就是讓別人做同樣的事情,但是別人卻不僅將我的事情做了,還會把他的事情也做了,換言之,這個人做的事情,是他獨有的事情和我需要做的事情的綜合。回到程式碼,那麼就是,代理類執行與委託類同樣的方法,在這方法裡代

Spring-AOP的原理-動態代理-IOC-註解配置

一:概念的介紹:     什麼叫AOP?           關鍵:  橫向重複,縱向提取;         AOP能為容器中管理的物件動態生成代理物件,AOP是指程式設計不是針對某一個物件,而是針對一群物件,打個比方:就像一個一個個圓柱形,這一個個圓柱形就是一個個

Spring AOP的兩種代理方式

Spring AOP是通過為目標物件建立代理來實現的。其使用的代理方式有兩種: JDK 動態代理 (目標物件實現了介面時使用,只會代理目標介面方法) CGLIB (當目標物件沒有實現介面時只能使用CGLIB ,當然可以通過配置強制有介面的物件也使用CGLIB

基於Springboot的Spring AOP學習記錄

前段時間各種面試,aop問到就蒙逼,所以結合新學的springboot重新理一下這玩意兒,很重要啊 一、AOP概述 AOP(面對切面程式設計)是對OOP(面向物件程式設計)的補充,總體來說,程式設計正規化包含:面向過程程式設計、面向物件程式設計、函數語言

Spring AOP學習筆記(一)-AOP相關概念和基於註解方式實現AOP的規則

一、 Spring AOP 概念 其實AOP就是要將我們Aspect中的Pointcut和Target Object中的JointPoint動態的連線起來,同時我們通過Advice指明Pointcut執行的一個時機。這是個人理解 AOP相關名詞解釋

spring aop學習9:Aop的鏈式呼叫(責任鏈模式)

一.責任鏈模式 1.基本的責任鏈模式 ◆主體父類:abstract class Subject.java package com.tiglle.responsibility.chain.model; //主體 public abstract class