`
sheungxin
  • 浏览: 105861 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java代理机制简单实现

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

  • jdk代理
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异常的时候调用
	 * @param pjp
	 * @throws Throwable
	 */
	@Around("anyMethod()")
	public void invoke(ProceedingJoinPoint pjp) throws Throwable{
		pjp.proceed();  
	}

}
0
0
分享到:
评论

相关推荐

    java代理机制 JDK动态代理和cglib代理 详解

    Java代理机制是Java编程中一个重要的特性,它允许我们在不修改原有代码的基础上,为已有类增加额外的功能。本文将深入探讨两种主要的Java代理实现:JDK动态代理和CGLIB代理。 一、JDK动态代理 JDK动态代理基于接口...

    JAVA实现动态代理的简单流程

    在深入探讨Java动态代理的实现过程之前,我们首先需要理解动态代理的基本概念及其在Java中的应用价值。动态代理,顾名思义,是在运行时动态创建代理对象的一种机制,它无需在编译期就确定代理类的具体实现,而是通过...

    Java动态代理两种实现方式

    总结来说,Java动态代理为开发者提供了灵活的代码扩展机制,可以根据实际需求选择适合的实现方式。JDK动态代理适用于接口丰富的场景,而Cglib更适合对性能有较高要求或者目标对象无法实现接口的情况。

    浅谈java代理机制 .txt

    Java代理机制是软件开发中一个重要的技术手段,特别是在实现面向切面编程、增强类的功能等方面有着广泛的应用。通过理解并掌握Java代理机制,开发者可以更加灵活地应对复杂的业务需求,提高代码的可扩展性和可维护性...

    使用java动态代理技术实现简单的AOP切面编程实例

    Java 动态代理技术是Java平台提供的一种强大的编程机制,它允许我们在运行时创建具有特定接口的代理对象,这些代理对象可以对方法调用进行拦截和处理,这正是AOP(面向切面编程)的核心思想。在Java中,动态代理主要...

    Java代理服务器的实现

    通过以上步骤,这个简单的Java代理服务器就能够实现基本的功能。在实际部署中,可能还需要添加更多高级功能,如支持HTTPS、缓存机制、错误处理、安全验证等。此外,为了提高性能和可维护性,可以考虑使用更现代的...

    基于Java动态代理和反射机制实现ORM

    在Java中,基于动态代理和反射机制实现ORM可以提高代码的可维护性和灵活性。本篇文章将深入探讨如何在Java环境下,结合MySQL数据库,利用动态代理和反射技术来实现简单的ORM框架。 首先,我们需要了解动态代理和...

    利用反射和动态代理机制实现自定义拦截器Interceptor

    利用反射和动态代理机制实现自定义拦截器Interceptor 在本文中,我们将探讨如何利用反射和动态代理机制来实现自定义拦截器Interceptor。拦截器Interceptor是一种常见的设计模式,用于在方法调用前后执行某些操作,...

    Java代理模式Java动态代理

    通过上述介绍,我们可以看到Java代理模式及其动态代理机制为开发者提供了强大的功能扩展能力。无论是通过代理模式控制对象的访问,还是利用Java动态代理实现特定时刻的行为增强,都是在不改变现有代码结构的前提下...

    java动态代理机制分析及拓展

    Java动态代理机制的优点在于灵活性和便捷性,它允许在运行时动态创建符合特定接口的代理对象,无需对原有代码做任何修改,使得我们可以方便地实现诸如日志、事务控制等跨切面的逻辑。不过,动态代理仅限于代理接口,...

    java动态代理实现详解

    Java 动态代理是Java平台提供的一种强大的工具,它允许我们在运行时动态生成代理类,这些代理类可以实现一组指定的接口,同时还能在方法调用前后添加自定义的行为。这种机制大大简化了面向切面编程(AOP)和事件监听...

    Java反射机制与动态代理

    总结起来,Java反射机制和动态代理是强大的编程工具,它们允许程序员在运行时探索和操作类的内部结构,实现动态行为和扩展功能。然而,使用时应谨慎,因为它们也可能引入性能问题和安全风险。在适当的情况下,反射和...

    java动态代理demo

    Java动态代理基于Java反射机制,可以在运行时动态地创建代理类和代理对象。与静态代理(即手动编写代理类)相比,动态代理无需预先为每个接口编写单独的代理类,使得代码更加灵活且易于维护。 2. **代理接口** 在...

    Java代理服务器程序

    Java代理服务器程序是一种用于转发网络请求的应用,它在客户端与目标服务器之间起到中介的作用。这样的设计使得用户可以通过代理服务器访问互联网,从而实现多种功能,如匿名浏览、负载均衡、缓存优化、网络监控等。...

    基于Java动态代理的AOP实现.zip

    基于Java动态代理的AOP实现 项目简介 本项目旨在通过Java的动态代理技术实现面向切面编程(AOP),涵盖了静态代理、JDK动态代理、CGLIB动态代理、AspectJ以及基于instrumentation的动态代理等多种实现方式。通过...

    使用一个小例子解释Java回调/代理机制的项目压缩包

    通过这个项目,你可以学习如何在Java中实现回调和代理机制,以及它们在实际应用中的价值。回调可以用于异步编程、事件驱动架构,而代理则常用于控制访问、数据验证和性能优化等场景。理解并熟练运用这两种机制对于...

    代理服务器实现-java(源码)

    总的来说,这个Java代理服务器示例提供了一个基础的代理服务实现,有助于理解网络编程、HTTP协议以及Java中的多线程和网络通信机制。通过扩展这个基础代码,可以实现更复杂的代理功能,如缓存、访问控制、加密等。

    使用JAVA中的动态代理实现数据库连接池

    Java的动态代理机制允许我们在运行时创建一个实现了指定接口的对象,这个对象的行为可以在`InvocationHandler`中自定义。当调用代理对象的任何方法时,都会转到`InvocationHandler`的`invoke`方法。这一特性使得我们...

Global site tag (gtag.js) - Google Analytics