服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|

服务器之家 - 编程语言 - JAVA教程 - java 代理机制的实例详解

java 代理机制的实例详解

2020-12-20 15:32sheungxin JAVA教程

这篇文章主要介绍了java 代理机制的实例详解的相关资料,这里说明下如何实现代理机制,帮助大家理解掌握这部分内容,需要的朋友可以参考下

java 代理机制的实例详解

前言:

 java代理分静态代理和动态代理,动态代理有jdk代理和cglib代理两种,在运行时生成新的子类class文件。本文主要练习下动态代理,代码用于备忘。对于代理的原理和机制,网上有很多写的很好的,就不班门弄斧了。

jdk代理

实例代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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代理

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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注解

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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异常的时候调用
   * @param pjp
   * @throws Throwable
   */
  @Around("anyMethod()")
  public void invoke(ProceedingJoinPoint pjp) throws Throwable{
    pjp.proceed(); 
  }
 
}

以上就是java代理机制的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://sheungxin.iteye.com/blog/2346329

延伸 · 阅读

精彩推荐