亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Spring筆記03_AOP

blair / 2130人閱讀

摘要:介紹什么是在軟件業(yè),為的縮寫,意為面向切面編程,通過預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。切面是切入點(diǎn)和通知引介的結(jié)合。切面類權(quán)限校驗(yàn)。。。

1. AOP 1.1 AOP介紹 1.1.1 什么是AOP

在軟件業(yè),AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。AOP是OOP(面向?qū)ο缶幊蹋┑难永m(xù),是軟件開發(fā)中的一個(gè)熱點(diǎn),也是Spring框架中的一個(gè)重要內(nèi)容,是函數(shù)式編程的一種衍生范型。利用AOP可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時(shí)提高了開發(fā)的效率。

AOP采取橫向抽取機(jī)制,取代了傳統(tǒng)縱向繼承體系重復(fù)性代碼。如下圖所示:

經(jīng)典應(yīng)用:事務(wù)管理、性能監(jiān)視、安全檢查、緩存 、日志等。

Spring AOP使用純Java實(shí)現(xiàn),不需要專門的編譯過程和類加載器,在運(yùn)行期通過代理方式向目標(biāo)類織入增強(qiáng)代碼。

AspectJ是一個(gè)基于Java語(yǔ)言的AOP框架,從Spring2.0開始,Spring AOP引入對(duì)Aspect的支持,AspectJ擴(kuò)展了Java語(yǔ)言,提供了一個(gè)專門的編譯器,在編譯時(shí)提供橫向代碼的織入。

1.1.2 AOP實(shí)現(xiàn)原理

aop底層將采用代理機(jī)制進(jìn)行實(shí)現(xiàn)

接口+實(shí)現(xiàn)類時(shí):Spring采用JDK的動(dòng)態(tài)代理Proxy

只有實(shí)現(xiàn)類時(shí):Spring采用cglib字節(jié)碼增強(qiáng)。這種底層屬于繼承增強(qiáng)。

1.1.3 AOP術(shù)語(yǔ)【掌握】

Target :目標(biāo)類,需要被代理的類。本例中如:UserDao

Joinpoint(連接點(diǎn)) :所謂連接點(diǎn)是指那些可能被攔截到的點(diǎn)。在spring中,這些點(diǎn)指的是方法,因?yàn)閟pring只支持方法類型的連接點(diǎn)。本例中如:UserDao的所有的方法

PointCut 切入點(diǎn) :所謂切入點(diǎn)是指我們要對(duì)哪些Joinpoint進(jìn)行攔截,即已經(jīng)被增強(qiáng)的連接點(diǎn)。例如:save()

Advice :通知/增強(qiáng),增強(qiáng)的代碼。例如:checkPri()
所謂通知是指攔截到Joinpoint之后所要做的事情就是通知,通知分為前置通知、后置通知、異常通知、最終通知、環(huán)繞通知(即切面要完成的功能)。

Weaving(織入) :是指把通知/增強(qiáng)advice應(yīng)用到目標(biāo)對(duì)象target來創(chuàng)建新的代理對(duì)象proxy的過程。
spring采用動(dòng)態(tài)代理織入,而AspectJ采用編譯期織入和類裝在期織入。

Proxy :代理類,一個(gè)類被AOP織入增強(qiáng)后,就產(chǎn)生一個(gè)結(jié)果代理類。

Aspect(切面) : 是切入點(diǎn)Pointcut和通知Advice(引介)的結(jié)合。

Introduction(引介) :引介是一種特殊的通知,在不修改類代碼的前提下,Introduction 可以在運(yùn)行期為類動(dòng)態(tài)地添加一些方法或Field。

小結(jié):

一個(gè)線是一個(gè)特殊的面。
一個(gè)切入點(diǎn)和一個(gè)通知,組成成一個(gè)特殊的面。
詳解如圖01:

詳解如圖02:

1.2 AOP的底層實(shí)現(xiàn)(了解)

動(dòng)態(tài)代理

JDK動(dòng)態(tài)代理:只能對(duì)實(shí)現(xiàn)了接口的類產(chǎn)生代理

Cglib動(dòng)態(tài)代理(第三方代理技術(shù)):對(duì)沒有實(shí)現(xiàn)接口的類產(chǎn)生代理對(duì)象,生成子類對(duì)象。

代理知識(shí)點(diǎn)參考:https://www.cnblogs.com/itzho...

1.2.1 JDK動(dòng)態(tài)代理

準(zhǔn)備工作:新建web項(xiàng)目,不需要導(dǎo)包

代理對(duì)象UserDao

package com.itzhouq.spring.demo1;

public interface UserDao {
    public void save();
    public void update();
    public void find();
    public void delete();
}

實(shí)現(xiàn)類

package com.itzhouq.spring.demo1;

public class UserDaoImpl implements UserDao {

    @Override
    public void save() {
        System.out.println("保存用戶");
    }

    @Override
    public void update() {
        System.out.println("更新用戶");
    }

    @Override
    public void find() {
        System.out.println("查找用戶");
    }

    @Override
    public void delete() {
        System.out.println("刪除用戶");
    }

}

使用JDK產(chǎn)生UserDao的代理類

  package com.itzhouq.spring.demo1;
  
  import java.lang.reflect.InvocationHandler;
  import java.lang.reflect.Method;
  import java.lang.reflect.Proxy;
  
  /*
   * 使用JDK動(dòng)態(tài)代理對(duì)UserDao產(chǎn)生代理
   */
  public class JDKProxy implements InvocationHandler {
      // 將被增強(qiáng)的對(duì)象傳遞到代理總
      private UserDao userDao;
      public JDKProxy(UserDao userDao) {
          this.userDao = userDao;
      }
      /*
       * 產(chǎn)生UserDao代理的方法
       */
      public UserDao createProxy() {
          UserDao userDaoProxy = (UserDao) Proxy.newProxyInstance(
                  userDao.getClass().getClassLoader(),
                  userDao.getClass().getInterfaces(),
                  this);
          return userDaoProxy;
      }
      @Override
      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
          // 判斷方法名是不是save
          if("save".equals(method.getName())) {
              // 增強(qiáng)
              System.out.println("權(quán)限校驗(yàn)==============");
              return method.invoke(userDao, args);
              
          }
          return method.invoke(userDao, args);
      }
  }

測(cè)試類

package com.itzhouq.spring.demo1;

import org.junit.Test;

public class SpringDemo1 {
    
    @Test
    //JDK動(dòng)態(tài)代理
    public void test1() {
        UserDao userDao = new UserDaoImpl();
        // 創(chuàng)建代理
        UserDao proxy = new JDKProxy(userDao).createProxy();
        proxy.save();
        proxy.find();
        proxy.delete();
        proxy.update();
        //權(quán)限校驗(yàn)==============
        //保存用戶
        //查找用戶
        //刪除用戶
        //更新用戶
    }
}

1.2.2 Cglib動(dòng)態(tài)代理

Cglib是第三方開源代碼生成類庫(kù),動(dòng)態(tài)添加類的屬性和方法

cglib的運(yùn)行原理:在運(yùn)行時(shí)創(chuàng)建目標(biāo)類的子類從而對(duì)目標(biāo)類進(jìn)行增強(qiáng)。

因?yàn)镾pring核心包中包含了cglib的包,所以引入Spring的4+2必備包就可以使用Cglib了

目標(biāo)類:沒有實(shí)現(xiàn)接口

package com.itzhouq.spring.demo2;

public class CustomerDao {
    public void save() {
        System.out.println("保存客戶");
    }
    public void update() {
        System.out.println("更新客戶");
    }
    public void find() {
        System.out.println("查找客戶");
    }
    public void delete() {
        System.out.println("刪除客戶");
    }
}

Cglib代理類

 package com.itzhouq.spring.demo2;
 
 import java.lang.reflect.Method;
 
 import org.springframework.cglib.proxy.Enhancer;
 import org.springframework.cglib.proxy.MethodInterceptor;
 import org.springframework.cglib.proxy.MethodProxy;
 
 /*
  * Cglib動(dòng)態(tài)代理
  */
 public class CglibProxy implements MethodInterceptor {
     
     private CustomerDao customerDao;
 
     public CglibProxy(CustomerDao customerDao) {
         this.customerDao = customerDao;
     }
     
     // 使用Cglib產(chǎn)生代理的方法
     public CustomerDao createProxy() {
         // 1. 創(chuàng)建cglib的核心類對(duì)象
         Enhancer enhancer = new Enhancer();
         // 2. 設(shè)置父類
         enhancer.setSuperclass(customerDao.getClass());
         // 3. 設(shè)置回調(diào)(類似于InvocationHandler對(duì)象)
         enhancer.setCallback(this);
         // 4. 創(chuàng)建代理對(duì)象
         CustomerDao proxy = (CustomerDao) enhancer.create();
         return proxy;
     }
 
     @Override
     public Object intercept(Object proxy, Method method, Object[] arg, MethodProxy methodProxy) 
             throws Throwable {
         // 判斷方法是否為save
         if("save".equals(method.getName())) {
             // 增強(qiáng)
             System.out.println("權(quán)限校驗(yàn)========");
             return methodProxy.invokeSuper(proxy, arg);
         }
         return methodProxy.invokeSuper(proxy, arg);
     }
 }

測(cè)試

  package com.itzhouq.spring.demo2;
  
  import org.junit.Test;
  
  public class SpringDemo2 {
      /*
       * cglib的測(cè)試
       */
      
      @Test
      public void test1() {
          CustomerDao customerDao = new CustomerDao();
          CustomerDao proxy = new CglibProxy(customerDao).createProxy();
          proxy.save();
          proxy.find();
          proxy.update();
          proxy.delete();
          //權(quán)限校驗(yàn)========
          //保存客戶
          //查找客戶
          //更新客戶
          //刪除客戶
      }
  }
1.2.3 總結(jié)

Spring在運(yùn)行期,生成動(dòng)態(tài)代理對(duì)象,不需要特殊的編譯器。

Spring AOP的底層是通過JDK動(dòng)態(tài)代理或者Cglib動(dòng)態(tài)代理技術(shù)為目標(biāo)bean執(zhí)行橫向織入的。

Spring會(huì)優(yōu)先使用Spring使用JDK代理方式進(jìn)行代理

若目標(biāo)對(duì)象沒有實(shí)現(xiàn)任何接口,Spring容器會(huì)使用Cglib動(dòng)態(tài)代理

標(biāo)記為final的方法不能被代理,因?yàn)闊o法進(jìn)行覆蓋

Cglib動(dòng)態(tài)代理,是針對(duì)的目標(biāo)類產(chǎn)生子類,所以目標(biāo)類不能被final修飾。

Spring只支持方法連接點(diǎn),不提供屬性連接。

2. Spring的AOP的開發(fā)(AspectJ的XML方式) 2.1 Spring的AOP簡(jiǎn)介

AOP思想最早是由AOP聯(lián)盟組織提出。Spring是使用這種思想最好的框架。

Spring的AOP有自己的實(shí)現(xiàn)方式(非常繁瑣)。AspectJ是一個(gè)AOP框架,Spring引入AspectJ作為自身AOP的開發(fā)

Spring兩種開發(fā)方式

Spring傳統(tǒng)方式(棄用)。

Spring基于AspectJ的AOP開發(fā)方式(使用)。

2.2 AOP入門開發(fā) 2.2.1 準(zhǔn)備工程和jar包

除去基本的6個(gè)包,在web項(xiàng)目中添加aop開發(fā)的相關(guān)jar包

AOP聯(lián)盟規(guī)范包:..spring相關(guān)依賴包spring-framework-3.0.2.RELEASE-dependenciesorg.aopalliancecom.springsource.org.aopalliance1.0.0com.springsource.org.aopalliance-1.0.0.jar

AOP包:..spring-framework-4.2.4.RELEASE-distspring-framework-4.2.4.RELEASElibsspring-aop-4.2.4.RELEASE.jar

AspectJ包:..spring相關(guān)依賴包spring-framework-3.0.2.RELEASE-dependenciesorg.aspectjcom.springsource.org.aspectj.weaver1.6.8.RELEASEcom.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

Spring和ASpectJ整合包:..spring-framework-4.2.4.RELEASE-distspring-framework-4.2.4.RELEASElibsspring-aspects-4.2.4.RELEASE.jar

Spring整合JUnit單元測(cè)試包:..spring-framework-4.2.4.RELEASE-distspring-framework-4.2.4.RELEASElibsspring-test-4.2.4.RELEASE.jar

2.2.2 引入Spring的配置文件

引入aop的約束

約束的位置:../spring-framework-4.2.4.RELEASE-dist/spring-framework-4.2.4.RELEASE/docs/spring-framework-reference/html/xsd-configuration.html 40.2.7 the aop schema



2.2.3 編寫目標(biāo)類并完成配置

目標(biāo)接口

package com.itzhouq.spring.demo3;

public interface ProductDao {
    public void save();
    public void update();
    public void find();
    public void delete();
}

目標(biāo)類

package com.itzhouq.spring.demo3;

public class ProductDaoImpl implements ProductDao {

    @Override
    public void save() {
        System.out.println("保存商品");
    }

    @Override
    public void update() {
        System.out.println("更新商品");
    }

    @Override
    public void find() {
        System.out.println("查找商品");
    }

    @Override
    public void delete() {
        System.out.println("刪除商品");
    }

}

配置目標(biāo)對(duì)象


2.2.4 測(cè)試類
package com.itzhouq.spring.demo3;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/*
 * AOP入門
 */
@RunWith(SpringJUnit4ClassRunner.class)    //這兩個(gè)注釋就是Spring整合了JUnit單元測(cè)試
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringDemo3 {
    
    //注入productDao
    @Resource(name="productDao")
    private ProductDao productDao;
    
    @Test
    public void test1() {
        productDao.save();
        productDao.update();
        productDao.find();
        productDao.delete();
//        保存商品
//        更新商品
//        查找商品
//        刪除商品
    }
}

下面需要對(duì)save()方法增強(qiáng)

2.2.5 編寫一個(gè)切面類

切面:多個(gè)通知和多個(gè)切入點(diǎn)的組合。

 package com.itzhouq.spring.demo3;
          /*
           * 切面類
           */
          public class MyAspectXML {
              public void checkPri() {
                  System.out.println("權(quán)限校驗(yàn)。。。");
              }
          }
2.2.6 將切面類交給Spring

    
      

2.2.7 通過AOP的配置實(shí)現(xiàn)動(dòng)態(tài)代理

    
        
        
        
        
            
        
    
2.2.8 測(cè)試類中運(yùn)行結(jié)果,save實(shí)現(xiàn)了增強(qiáng)
@RunWith(SpringJUnit4ClassRunner.class)    //這兩個(gè)注釋就是Spring整合了JUnit單元測(cè)試
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringDemo3 {
    
    //注入productDao
    @Resource(name="productDao")
    private ProductDao productDao;
    
    @Test
    public void test1() {
        productDao.save();
        productDao.update();
        productDao.find();
        productDao.delete();
//        權(quán)限校驗(yàn)。。。
//        保存商品
//        更新商品
//        查找商品
//        刪除商品

    }
}
2.3 Spring中的通知類型 2.3.1 前置通知

配置



    

在目標(biāo)方法執(zhí)行之前進(jìn)行操作

可以獲得切入點(diǎn)的信息

比如在切面類中加入?yún)?shù)JoinPoint

public class MyAspectXML {
    
    public void checkPri(JoinPoint joinPoint) {
        System.out.println("權(quán)限校驗(yàn)。。。"+joinPoint);
    }
}

測(cè)試打印的效果

//        權(quán)限校驗(yàn)。。。execution(void com.itzhouq.spring.demo3.ProductDao.save())
//        保存商品
//        更新商品
//        查找商品
//        刪除商品

2.3.2 后置通知:

在目標(biāo)方法之后操作,可以獲得返回值

修改接口ProductDao和實(shí)現(xiàn)類ProductDaoImpl類的delete方法的返回值為String

配置后置通知


    
        
        
        
        
        
            
            
            
            
        
    

在后置切面類中添加記錄日志的方法

 /*
       * 后置通知演示
       */
      public void writeLog(Object result) {
          System.out.println("日志記錄======="+result);
      }

測(cè)試

權(quán)限校驗(yàn)。。。execution(void com.itzhouq.spring.demo3.ProductDao.save())
//        保存商品
//        更新商品
//        查找商品
//        刪除商品
//        日志記錄=======kkk

2.3.3 環(huán)繞通知:

在目標(biāo)方法執(zhí)行之前 和之后進(jìn)行操作

環(huán)繞通知可以組織目標(biāo)方法的執(zhí)行

舉例:需求---在修改方法update前后添加性能監(jiān)控

在切面類中添加一個(gè)方法用來測(cè)試環(huán)繞通知

/**
       * 性能監(jiān)控
       * @throws Throwable 
       */
      public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
          System.out.println("環(huán)繞前通知===========");
          Object obj = joinPoint.proceed();//這一步相當(dāng)于執(zhí)行目標(biāo)程序
          System.out.println("環(huán)繞后通知=========");
          return obj;
      }

配置環(huán)繞通知


        
        
        
        
        
        
            
            
            
            
            
            
        
    

測(cè)試

//        權(quán)限校驗(yàn)。。。execution(void com.itzhouq.spring.demo3.ProductDao.save())
//        保存商品
//        環(huán)繞前通知===========
//        更新商品
//        環(huán)繞后通知=========
//        查找商品
//        刪除商品
//        日志記錄=======kkk

2.3.4 異常拋出通知:

在程序拋出異常時(shí)候進(jìn)行操作,可以得到異常信息

在find方法上模擬一個(gè)異常

@Override
    public void find() {
        System.out.println("查找商品");
        int i = 1 / 0;
    }

切面類中添加一個(gè)方法用于測(cè)試異常拋出通知

 /*
       * 異常拋出通知
       */
      public void afterThrowing(Throwable ex) {
          System.out.println("異常拋出通知=======" + ex);
      }

配置異常通知


        
        
        
        
        
        
        
            
            
            
            
            
            
            
            
        
    

測(cè)試

//        權(quán)限校驗(yàn)。。。execution(void com.itzhouq.spring.demo3.ProductDao.save())
//        保存商品
//        環(huán)繞前通知===========
//        更新商品
//        環(huán)繞后通知=========
//        查找商品
//        異常拋出通知=======java.lang.ArithmeticException: / by zero

2.3.5 最終通知:

在切面類中添加方法測(cè)試最終通知

/*
       * 最終通知:相當(dāng)于finally代碼塊中的內(nèi)容
       */
      public void after() {
          System.out.println("最終通知=========");
      }

配置最終通知


            

測(cè)試

無論是否有異常,最終通知都會(huì)執(zhí)行。

2.3.6 引介通知(不用會(huì)) 2.4 切入點(diǎn)表達(dá)式【掌握】
1.execution()  用于描述方法【掌握】
    語(yǔ)法:execution(修飾符  返回值  包.類.方法名(參數(shù)) throws異常)
        修飾符,一般省略
            public      公共方法
            *           任意
        返回值,不能省略
            void        返回沒有值
            String      返回值字符串
            *           任意
        包,[可以省略]
            com.itheima.crm                 固定的包
            com.itheima.crm.*.service       crm包下面的任意子包,固定目錄service(例如:com.itheima.crm.staff.service)
            com.itheima.crm..               crm包下面的所有子包(含自己)
            com.itheima.crm.*.service..     crm包下面的任意子包,固定目錄service,service目錄任意包(含自己)
        類,[可以省略]
            UserServiceImpl                 指定的類
            *Impl                           以Impl結(jié)尾的類
            User*                           以User開頭的類
            *                               任意的類
        方法名,不能省略
            addUser                         固定的方法名
            add*                            以add開頭的方法名
            *Do                             以Do結(jié)尾的方法名
            *                               任意的方法名
        (參數(shù))
            ()                              無參
            (int)                           一個(gè)整型
            (int, int)                      兩個(gè)整型
            (..)                            參數(shù)任意
        throws,[可以省略],一般省略。

    綜合案例1:
        execution(* com.itheima.crm.*.service..*.*(..))
    綜合案例2:
        

2.within:匹配包或子包中的方法(了解)
    within(com.itheima.aop..*)
3.this:匹配實(shí)現(xiàn)了接口的代理對(duì)象中的方法(了解)
    this(com.itheima.aop.user.UserDAO)
4.target:匹配實(shí)現(xiàn)了接口的目標(biāo)對(duì)象中的方法(了解)
    target(com.itheima.aop.user.UserDAO)
5.args:匹配參數(shù)格式符合標(biāo)準(zhǔn)的方法(了解)
    args(int, int)
6.bean(id):對(duì)指定的bean所有的方法(了解)
    bean("userServiceId")

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/74401.html

相關(guān)文章

  • Spring筆記04_AOP注解開發(fā)_模板_事務(wù)

    摘要:后置增強(qiáng)周杰倫環(huán)繞通知在切面類中添加以下方法環(huán)繞通知環(huán)繞前增強(qiáng)環(huán)繞前增強(qiáng)測(cè)試前置增強(qiáng)保存訂單。。。不使用事務(wù)管理。 1. Spring基于AspectJ的注解的AOP開發(fā) 1. 1 SpringAOP的注解入門 創(chuàng)建項(xiàng)目,導(dǎo)入jar包 需要導(dǎo)入Spring基礎(chǔ)包4+2 需要導(dǎo)入AOP聯(lián)盟包、AspectJ包、Spring整合Aspect包Spring-aop包 Spring整合單...

    youkede 評(píng)論0 收藏0
  • 慕課網(wǎng)_《探秘Spring AOP》學(xué)習(xí)總結(jié)

    時(shí)間:2017年09月03日星期日說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:https://github.com/zccodere/s...學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 面向切面 課程章節(jié) 概覽 AOP使用 AOP原理 AOP開源運(yùn)用 課程實(shí)戰(zhàn) 課程總結(jié) 面向切面編程是一種...

    Tony_Zby 評(píng)論0 收藏0
  • Spring框架學(xué)習(xí)筆記(一):官方文檔介紹,IoC與AOP概念學(xué)習(xí)

    摘要:構(gòu)造函數(shù)注入通過調(diào)用類的構(gòu)造函數(shù),將接口實(shí)現(xiàn)類通過構(gòu)造函數(shù)變量傳入。而在中,其使用橫切技術(shù),將這類代碼從原屬的封裝對(duì)象中提取出來,封裝到一個(gè)可重用模塊中,稱為。 最近實(shí)習(xí)用到Spring的開發(fā)框架,但是之前沒有接觸過,因此希望利用網(wǎng)上的資源來學(xué)習(xí)以下。 Spring官方給出了非常全面的介紹,非常適合我這種完全的小白……在這一系列學(xué)習(xí)中,我閱讀的主要資源是5.1.2 Reference ...

    mindwind 評(píng)論0 收藏0
  • Spring Boot 2.x(十一):AOP實(shí)戰(zhàn)--打印接口日志

    摘要:接口日志有啥用在我們?nèi)粘5拈_發(fā)過程中,我們可以通過接口日志去查看這個(gè)接口的一些詳細(xì)信息。在切入點(diǎn)返回內(nèi)容之后切入內(nèi)容可以用來對(duì)處理返回值做一些加工處理。 接口日志有啥用 在我們?nèi)粘5拈_發(fā)過程中,我們可以通過接口日志去查看這個(gè)接口的一些詳細(xì)信息。比如客戶端的IP,客戶端的類型,響應(yīng)的時(shí)間,請(qǐng)求的類型,請(qǐng)求的接口方法等等,我們可以對(duì)這些數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,提取出我們想要的信息。 怎么拿到接口...

    Youngdze 評(píng)論0 收藏0
  • Spring入門IOC和AOP學(xué)習(xí)筆記

    摘要:入門和學(xué)習(xí)筆記概述框架的核心有兩個(gè)容器作為超級(jí)大工廠,負(fù)責(zé)管理創(chuàng)建所有的對(duì)象,這些對(duì)象被稱為。中的一些術(shù)語(yǔ)切面切面組織多個(gè),放在切面中定義。 Spring入門IOC和AOP學(xué)習(xí)筆記 概述 Spring框架的核心有兩個(gè): Spring容器作為超級(jí)大工廠,負(fù)責(zé)管理、創(chuàng)建所有的Java對(duì)象,這些Java對(duì)象被稱為Bean。 Spring容器管理容器中Bean之間的依賴關(guān)系,使用一種叫做依賴...

    wenyiweb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<