欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java 代理機(jī)制的實(shí)例詳解

 更新時(shí)間:2017年08月24日 15:35:11   投稿:lqh  
這篇文章主要介紹了java 代理機(jī)制的實(shí)例詳解的相關(guān)資料,這里說明下如何實(shí)現(xiàn)代理機(jī)制,幫助大家理解掌握這部分內(nèi)容,需要的朋友可以參考下

java 代理機(jī)制的實(shí)例詳解

前言:

 java代理分靜態(tài)代理和動(dòng)態(tài)代理,動(dòng)態(tài)代理有jdk代理和cglib代理兩種,在運(yùn)行時(shí)生成新的子類class文件。本文主要練習(xí)下動(dòng)態(tài)代理,代碼用于備忘。對(duì)于代理的原理和機(jī)制,網(wǎng)上有很多寫的很好的,就不班門弄斧了。

jdk代理

實(shí)例代碼

import java.lang.reflect.InvocationHandler; 
import java.lang.reflect.Method; 
import java.lang.reflect.Proxy; 
 
public class ProxyFactory implements InvocationHandler {  
    
  private Object tarjectObject;  
  
  public Object creatProxyInstance(Object obj) {  
    this.tarjectObject = obj; 
    return Proxy.newProxyInstance(this.tarjectObject.getClass()  
        .getClassLoader(), this.tarjectObject.getClass()  
        .getInterfaces(), this);  
  }  
  
  @Override  
  public Object invoke(Object proxy, Method method, Object[] args)  
      throws Throwable {  
    Object result = null;  
    if (AssessUtils.isAssess()) {  
      result = method.invoke(this.tarjectObject, args);  
    }else{ 
      throw new NoAssessException("This server cannot run this service."); 
    } 
    return result;  
  } 
} 

cglib代理

import java.lang.reflect.Method; 
import org.springframework.cglib.proxy.Enhancer; 
import org.springframework.cglib.proxy.MethodInterceptor; 
import org.springframework.cglib.proxy.MethodProxy; 
 
public class ProxyCglibFactory implements MethodInterceptor {  
    
  private Object tarjectObject;  
  
  public Object creatProxyInstance(Object obj) {  
    this.tarjectObject = obj; 
    Enhancer enhancer=new Enhancer(); 
    enhancer.setSuperclass(this.tarjectObject.getClass()); 
    enhancer.setCallback(this); 
    return enhancer.create(); 
  } 
 
  @Override 
  public Object intercept(Object obj, Method method, Object[] args, 
      MethodProxy arg3) throws Throwable { 
    Object result = null;  
    if (AssessUtils.isAssess()) {  
      result = method.invoke(this.tarjectObject, args);  
    }else{ 
      throw new NoAssessException("This server cannot run this service."); 
    } 
    return result;  
  } 
} 

Aspect注解

import org.aspectj.lang.JoinPoint; 
import org.aspectj.lang.ProceedingJoinPoint; 
import org.aspectj.lang.annotation.Around; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 
import org.aspectj.lang.annotation.Pointcut; 
 
@Aspect 
public class AssessInterceptor { 
  @Pointcut(value="execution (* com..*.*(..))") 
  private void anyMethod(){}; 
   
  @Before("anyMethod()") 
  public void doBefore(JoinPoint joinPoint) throws NoAssessException{ 
    if (!AssessUtils.isAssess()) {  
      throw new NoAssessException("This server cannot run this service."); 
    } 
  } 
   
  /** 
   * Around異常的時(shí)候調(diào)用 
   * @param pjp 
   * @throws Throwable 
   */ 
  @Around("anyMethod()") 
  public void invoke(ProceedingJoinPoint pjp) throws Throwable{ 
    pjp.proceed();  
  } 
 
} 

以上就是java代理機(jī)制的實(shí)例,如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Java synchronized的鎖升級(jí)過程詳解

    Java synchronized的鎖升級(jí)過程詳解

    在 JDK 1.6之前,synchronized 是一個(gè)重量級(jí)、效率比較低下的鎖,但是在JDK 1.6后,JVM 為了提高鎖的獲取與釋放效,,對(duì) synchronized 進(jìn)行了優(yōu)化,所以本文給大家介紹了synchronized的鎖升級(jí)過程,需要的朋友可以參考下
    2024-04-04
  • mybatisplus報(bào)Invalid bound statement (not found)錯(cuò)誤的解決方法

    mybatisplus報(bào)Invalid bound statement (not found)錯(cuò)誤的解決方法

    搭建項(xiàng)目時(shí)使用了mybatisplus,項(xiàng)目能夠正常啟動(dòng),但在調(diào)用mapper方法查詢數(shù)據(jù)庫時(shí)報(bào)Invalid bound statement (not found)錯(cuò)誤。本文給大家分享解決方案,感興趣的朋友跟隨小編一起看看吧
    2020-08-08
  • Springboot配置文件內(nèi)容加密代碼實(shí)例

    Springboot配置文件內(nèi)容加密代碼實(shí)例

    這篇文章主要介紹了Springboot配置文件內(nèi)容加密代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • IDEA自動(dòng)清理類中未使用的import包的操作方法

    IDEA自動(dòng)清理類中未使用的import包的操作方法

    在項(xiàng)目開發(fā)中,經(jīng)常會(huì)引入很多未使用的import包,這不僅增加了編譯時(shí)間,還會(huì)使代碼可讀性變差,設(shè)置IDEA自動(dòng)清理未使用的import包,可以提高代碼的可讀性,本文給大家介紹IDEA自動(dòng)清理類中未使用的import包的方法,感興趣的朋友一起看看吧
    2024-09-09
  • IDEA的spring項(xiàng)目使用@Qualifier飄紅問題及解決

    IDEA的spring項(xiàng)目使用@Qualifier飄紅問題及解決

    這篇文章主要介紹了IDEA的spring項(xiàng)目使用@Qualifier飄紅問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java8中Map的一些騷操作總結(jié)

    java8中Map的一些騷操作總結(jié)

    這篇文章主要給大家介紹了關(guān)于java8中Map的一些騷操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Oracle JDBC連接BUG解決方案

    Oracle JDBC連接BUG解決方案

    這篇文章主要介紹了Oracle JDBC連接BUG解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java并發(fā)編程之Java內(nèi)存模型

    Java并發(fā)編程之Java內(nèi)存模型

    這篇文章主要為大家介紹了Java內(nèi)存模型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助,希望能夠給你帶來幫助
    2021-11-11
  • SpringBoot-RestTemplate如何實(shí)現(xiàn)調(diào)用第三方API

    SpringBoot-RestTemplate如何實(shí)現(xiàn)調(diào)用第三方API

    這篇文章主要介紹了SpringBoot-RestTemplate實(shí)現(xiàn)調(diào)用第三方API的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java設(shè)計(jì)模式之建造者模式的示例詳解

    Java設(shè)計(jì)模式之建造者模式的示例詳解

    建造者模式,是一種對(duì)象構(gòu)建模式 它可以將復(fù)雜對(duì)象的建造過程抽象出來,使這個(gè)抽象過程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對(duì)象。本文將通過示例講解建造者模式,需要的可以參考一下
    2022-02-02

最新評(píng)論